对结构数组进行排序解决方法

对结构数组进行排序
-----------------数据声明---------------------------------
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```

------解决方案--------------------
不用写得这么乱。

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