读书人

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

发布时间: 2012-03-01 10:25:46 作者: rapoo

超郁闷的数组排序
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,如果说错了还请见凉

读书人网 >.NET

热点推荐