对结构数组进行排序

lengx7 2007-05-10 02:08:15
-----------------数据声明---------------------------------
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```
...全文
293 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lengx7 2007-05-10
  • 打赏
  • 举报
回复
(id=9,p=1)..(id=7,p=2)..(id=15,p=3)
其实只要排序完毕,p也就没有用了
只要能把id的值以9/7/15...顺序取出来就行
lengx7 2007-05-10
  • 打赏
  • 举报
回复
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)...这样的结果才是我想要的...
温飞_会员 2007-05-10
  • 打赏
  • 举报
回复
楼主写的太乱了,本来PASCAL是工整的语言.
ahjoe 2007-05-10
  • 打赏
  • 举报
回复
不用写得这么乱。

-----------------排序过程---------------------------------
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;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧