一个基础的Delphi冒泡算法!

lovearcher 2008-11-01 01:13:28
type
TPoint = Record
Output : integer;
Name : String[10]; //姓名
Chinese : integer; //语文得分
English : integer; //英语得分
Math : integer; //数学得分
end;
TPointarray = array[0..5] of TPoint;
var
TP : TPointarray =
(
(Name :'赵'; Chinese :85; English :88; Math:70),
(Name :'钱'; Chinese :70; English :65; Math:55),
(Name :'孙'; Chinese :75; English :50; Math:70),
(Name :'李'; Chinese :95; English :82; Math:80),
(Name :'周'; Chinese :92; English :70; Math:77),
(Name :'吴'; Chinese :77; English :80; Math:65)
);

procedure TForm1.FormCreate(Sender: TObject);
var
ii : integer;
begin
Memo1.Lines.Text := '学生成绩分数如下: ';
Memo1.Lines.Add('姓名'+#9+'语文'+#9+'英语'+#9'数学');
For ii := Low(TP) to High(TP) do
With TP[ii] do
Memo1.Lines.Add(Name + #9 +IntToStr(Chinese) + #9 + IntToStr(English) + #9 + IntToStr(Math));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
ZF:array [0..5] of Integer;
i,ii,j,AA:Integer;
begin
for I := Low(ZF) to High(ZF) do
begin
ZF[i]:=tp[i].Chinese+tp[i].English+tp[i].Math;
end;
for ii := Low(ZF) to High(ZF) -1 do
begin
for J := High(ZF) downto low(ZF) +1 do
if ZF[J] < ZF[J-1] then
begin
AA:=ZF[J];
ZF[J]:=ZF[J-1];
ZF[J-1]:=AA;
end;

end;

memo1.Lines.Add('排序显示学生成绩分数: ');
Memo1.Lines.Add('姓名'+#9+'语文'+#9+'英语'+#9'数学'+#9'总分');
For ii := Low(TP) to High(TP) do
With TP[ii] do
Memo1.Lines.Add(Name + #9 +IntToStr(Chinese) + #9 + IntToStr(English) + #9 + IntToStr(Math)+#9+(IntToStr(Chinese+english+math)));




这段代码我想要实现的功能是让他从大到小把成绩排出来.但是始终没有按照由大到小!请大家指教一下吧!
...全文
179 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovearcher 2008-11-01
  • 打赏
  • 举报
回复
谢谢 jadeluo 我还有一不解!就是我想让他从大到小!我怎么拍出来时从小到大呢!
jadeluo 2008-11-01
  • 打赏
  • 举报
回复
if ZF[J] < ZF[J-1] then

改成:

if ZF[J] > ZF[J-1] then

jadeluo 2008-11-01
  • 打赏
  • 举报
回复
LZ的排序算法中有问题:


procedure TForm1.Button1Click(Sender: TObject);
var
ZF:array [0..5] of Integer;
i,ii,j,AA:Integer;
AP : TPoint;
begin
for I := Low(ZF) to High(ZF) do
ZF[i] := tp[i].Chinese + tp[i].English + tp[i].Math;
for ii := Low(ZF) to High(ZF) - 1 do
begin
for J := High(ZF) - 1 downto ii do
if ZF[J] < ZF[J+1] then
begin
AA := ZF[J];
ZF[J] := ZF[J-1];
ZF[J-1] := AA;
AP := TP[J];
TP[J] := TP[J-1];
TP[J-1] := AP;
end;
end;
end;
lovearcher 2008-11-01
  • 打赏
  • 举报
回复
欧尚的朋友给的方法还是不行!可以自己试一下!
jadeluo 2008-11-01
  • 打赏
  • 举报
回复
在对ZF排序时没有同时对TP进行排序,所以结果不正确。


procedure TForm1.Button1Click(Sender: TObject);
var
ZF:array [0..5] of Integer;
i,ii,j,AA:Integer;
AP : TPoint;
begin
for I := Low(ZF) to High(ZF) do
ZF[i]:=tp[i].Chinese+tp[i].English+tp[i].Math;
for ii := Low(ZF) to High(ZF) -1 do
begin
for J := High(ZF) downto low(ZF) + 1 do
if ZF[J] < ZF[J-1] then
begin
AA := ZF[J];
ZF[J] := ZF[J-1];
ZF[J-1] := AA;
AP := TP[J];
TP[J] := TP[J-1];
TP[J-1] := AP;
end;
end;
end;


jerry8 2008-11-01
  • 打赏
  • 举报
回复
Ta:array[0..5] of integer=(6,7,1,2,4,8);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
Temp:Integer;
begin
for i:=high(ta) downto low(ta) do
begin
for j := i-1 downto low(ta) do
if ta[j]>ta[i] then
begin
Temp:=ta[j];
ta[j]:=ta[i];
ta[i]:=Temp;
end;
end;


for I := low(ta) to high(ta) do
caption:=caption+inttostr(ta[i]) ;
jerry8 2008-11-01
  • 打赏
  • 举报
回复
Ta:array[0..5] of integer=(6,7,1,2,4,8);

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
Temp:Integer;
begin
for i:=high(ta) downto low(ta) do
begin
for j := i-1 downto low(ta) do
if ta[j]>ta[i] then
begin
Temp:=ta[j];
ta[j]:=ta[i];
ta[i]:=Temp;
end;
end;


for I := low(ta) to high(ta) do
caption:=caption+inttostr(ta[i]) ;
lovearcher 2008-11-01
  • 打赏
  • 举报
回复
是的!是按照总分排序
fangsp 2008-11-01
  • 打赏
  • 举报
回复
是按照总分排序吗 ??

16,749

社区成员

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

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