guainew:array [0..100] of guailist;      //要排序的数组,guailist是自定义类型,有ID和P两个数据,以P的大小来决定排列顺序.[!![之所以设定长度,是因为我下面在给列表赋值时,如果用动态数组会出错,不知道如何解决]!!]
pppp:guailist;                         //交换位置时的临时变量         for m:=0 to length(guainew)-1 do begin
            j:=m;
            for i:=m+1 to length(guainew) do begin
                if (guainew[i].p<guainew[j].p)then begin j:=i;end;
                if (j>m) then begin
                 pppp:=guainew[m];
                 guainew[m]:=guainew[j];
                 guainew[j]:=pppp;
                 end;
             end;
          end;    for num:=0 to length(guainew)-1 do begin       //list显示部分
    listbox4.Items.Add(inttostr(guainew[num].id)+'-'+floattostr(guainew[num].p));
    end;
注:guainew数组里,P是single的,而且大约有70都是0,其他30个才是>0的数据。而且有一点很奇怪,listbox4.Items.Add在使用的时候应该是把新的数据‘追加’进来才对。那么我在“list显示部分”那里for 10次和100次的结果,前10个数据应该是一样的。但实际上“list显示部分”那里for 10次出现的全部都是0,for 100次的时候前几个数据才是正确的非0数据。不明白是怎么回事……

解决方案 »

  1.   

    for m:=0 to length(guainew)-2 do
    begin
      for i:=m+1 to length(guainew)-1 do
      begin
        if (guainew[i].p<guainew[m].p)then
        begin
          pppp:=guainew[m];
          guainew[m]:=guainew[i];
          guainew[i]:=pppp;
        end;
      end;
    end;
      

  2.   

    你用的是选择排序法吧,好象应该这样写把
    pppp:guailist;                         //交换位置时的临时变量        for m:=0 to length(guainew)-1 do 
    begin
                j:=m;
                /////////////////////////////////////////////////////////
                for i:=m+1 to length(guainew) do 
    begin
                     if (guainew[i].p<guainew[j].p)then 
    begin 
    j:=i;
    end;
     end;
                 //////////////////////////////////////////这一部分应该在一起的
               if (j>m) then
    begin
                   pppp:=guainew[m];
                     guainew[m]:=guainew[j];
                    guainew[j]:=pppp;
                    end;
                
              end;    for num:=0 to length(guainew)-1 do begin       //list显示部分
        listbox4.Items.Add(inttostr(guainew[num].id)+'-'+floattostr(guainew[num].p));
        end;
    我们现在学c++,刚自学了一点delphi,如果说错了还请见凉