-----------------数据声明---------------------------------
type guailist=record
id:Cardinal;
p:single;
end;guainew:array[0..1000] of guailist;
idk:Cardinal;
-----------------排序过程---------------------------------
 for m:=0 to length(guainew)-1 do begin
            j:=m;  ktest:=guainew[j].p ;
    for i:=m+1 to length(guainew) do begin
          if (guainew[i].p<ktest)then begin j:=i;ktest:=guainew[i].p;end;
                if j>m then begin
                  idk:=guainew[m].id ;
                  guainew[m].id:=guainew[j].id;
                  guainew[j].id:=idk;
                end;
    end;
 end;-------------------------事故--------------------------------
我定义的结构数据guainew里有id和p两个数据,我要比较p的大小,将guainew数组以p从小到大升序排列。然后再把guainew中的id取出来用
但是我上面这段代码一直没有排序成功,得出来的结果还是混乱排列的。如果我在             if j>m then begin
                 {代码X}
                end;
代码X处同时交换id和p的数据,那么我输出的时候id和p都会变成空的
代码X处如果以idk:=guainew;的方式交换数据,id和p还是会变成空的
只剩20分了..各位高手help```

解决方案 »

  1.   

    不用写得这么乱。-----------------排序过程---------------------------------
    for i := 0 to length(guainew)-2 do 
    begin
      ktest := guainew[i].p;
      for j:=i+1 to length(guainew)-1 do 
      begin
        if (guainew[j].p < ktest)then 
        begin
          guainew[i].p := guainew[j].p;
          guainew[j].p := ktest;
          ktest := guainew[i].p;
        end;
      end;
    end;
      

  2.   

    楼主写的太乱了,本来PASCAL是工整的语言.
      

  3.   

    for m:=0 to length(guainew)-1 do begin
        j:=m;  ktest:=guainew[j].p ;
        for i:=m+1 to length(guainew) do begin
              if (guainew[i].p<ktest)then begin
              j:=i;ktest:=guainew[i].p;
              end;
                    if (j>m) then begin
                      idk:=guainew[m].id ;
                      guainew[m].id:=guainew[j].id;
                      guainew[j].id:=idk;
                    end;
        end;
     end;
    ------------------------------------------------------------
    我改的工整一点....
    用了下1楼的方法,不过没有得到正确的结果...
    因为结构里有id和p两个值,是比较p来决定guainew[x]的先后顺序。而我排序之后,要读取的数据是id,所以id必须跟着p的位置跑...
    (id=9,p=1)..(id=7,p=2)..(id=15,p=3)...这样的结果才是我想要的...
      

  4.   

    (id=9,p=1)..(id=7,p=2)..(id=15,p=3)
    其实只要排序完毕,p也就没有用了
    只要能把id的值以9/7/15...顺序取出来就行