排序(50分)

  • 主题发起人 主题发起人 xuzhenshan
  • 开始时间 开始时间
X

xuzhenshan

Unregistered / Unconfirmed
GUEST, unregistred user!
假设说有a1,a2,a3,a4,a5,a6与b1,b2,b3,b4,b5,b6两组数据,a1与b1对应,a2与b2对应,依此类推,我想找出a1,a2,a3,a4,a5,a6数值从大到小排列的前三个以及在b1,b2,b3,b4,b5,b6对应的值,用什么方法简单一点
 
给你一个排序过程,你可以参考。很容易。
procedure QuickSort(var A:array of Integer
iLo,iHi:Integer);
var
Lo,Hi,Mid,T:Integer;
begin
Lo:=iLo;
Hi:=iHi;
Mid:=A[(Lo+Hi)div 2];
repeat
while A[Lo]<Mid do
Inc(Lo);
while A[Hi]>Mid do
Dec(Hi);
if Lo<=Hi then
begin
T:=A[Lo];
A[Lo]:=A[Hi];
A[Hi]:=T;
Inc(Lo);
Dec(Hi);
end;
until Lo>Hi;
if Hi>iLo then QuickSort(A,iLo,Hi);
if Lo<iHi then QuickSort(A,Lo,iHi);
end;
 
我想知道怎怎么找出a1,a2,a3,a4,a5,a6数值从大到小排列的前三个在b1,b2,b3,b4,b5,b6中对应的值
 
那你就修改一下上面的过程。排序A的同时,对B进行修改,让A和B保持对应关系。
procedure QuickSort(var A:array of Integer;var B:array of Integer
iLo,iHi:Integer);
var
Lo,Hi,Mid,T:Integer;
begin
Lo:=iLo;
Hi:=iHi;
Mid:=A[(Lo+Hi)div 2];
repeat
while A[Lo]<Mid do
Inc(Lo);
while A[Hi]>Mid do
Dec(Hi);
if Lo<=Hi then
begin
T:=A[Lo];
A[Lo]:=A[Hi];
A[Hi]:=T;
T:=B[Lo];
B[Lo]:=B[Hi];
B[Hi]:=T;
Inc(Lo);
Dec(Hi);
end;
until Lo>Hi;
if Hi>iLo then QuickSort(A,iLo,Hi);
if Lo<iHi then QuickSort(A,Lo,iHi);
end;
 
万能的排序方法:
type
urecord=record
a:UAType;
b:uBtype;
end;
function UCompare(Item1, Item2: Pointer): Integer;
begin
if urecord(Item1^).a>urecord(Item2^).a then result:=1
else if urecord(Item1^).a=urecord(Item2^).a then result:=0
else if urecord(Item1^).a<urecord(Item2^).a then result:=-1;
//这里的大于等于小于只是象征意义,表示你想让什么样的数据在前
end;
//----------排序---
var
list:Tlist;
r:array[1..6] of urecord;
i:integer;
begin
list:= TList.Create;
try
r[1].a:=a1;
r[1].b:=b1;
r[2].a:=a1;
r[2].b:=b1;
....
//这里根据你的需要构造记录
for i:=1 to 6 do
list.add(@R);
list.sort(UCompare);//按a排好了
...
//可以访问了。比如:
for i:=0 to list.count-1 do Ubtype:=urecord(list.Items^).b;
finally
list.Free;
end;
end;
看到了吗?这样可以对任何类型的数据排序。
 
我说的具体一点吧,a1,a2,a3,a4,a5,a6与b1,b2,b3,b4,b5,b6都是放在edit里面的,排序后
找出a1,a2,a3,a4,a5,a6数值从大到小排列的前三个以及在b1,b2,b3,b4,b5,b6对应的值,假设说a1,a2,a3与b1,b2,b3是所找的值,对其进行计算a1*b1+a2*b2+a3*b3,不好意思,我刚学delphi没多久,到现在也没用到过什么算法,这个可能比较简单,我也查了很多资料,但是就是糊里糊涂的,哪位能说的详细一点,不胜感激
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
539
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部