首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

超郁闷的数组排序解决办法

2012-03-01 
超郁闷的数组排序guainew:array[0..100]ofguailist//要排序的数组,guailist是自定义类型,有ID和P两个数据

超郁闷的数组排序
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数据。不明白是怎么回事……

[解决办法]
你用的是选择排序法吧,好象应该这样写把
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,如果说错了还请见凉

热点排行