如何排序? (20分)

  • 主题发起人 主题发起人 楚辞
  • 开始时间 开始时间

楚辞

Unregistered / Unconfirmed
GUEST, unregistred user!
各位仁兄:
兄弟乃一菜鸟。最近同事让我帮她做一个简单的实验报告:输入任意三个数a,b,c,
将它们按由大到小的顺序排列然后输出。。。。我该如何做?二十分送上!在线等待!焦急!!
 
那a,b,c哪个大一些呢?
 
//下面是简单选择排序算法,我从书上抄的:)
type
ListType=array[1..3] of integer

procedure SelectSort(var r:ListType)
var
i,j,k,x,n:integer;
begin
n:=high(r)-1;
for i:=1 to n do
begin
k:=i;
for j:=i+1 to n do
if r[j]< r[k] then k:=j;
if i<>k then
begin
x:=r;r:=r[k];r[k]:=x;
end;
end;
end;
 
川木寻叶同志你好。
a,b,c 是随机的即是人为输入进去的比如说我这次输1,2,3。而下次我则输3,8,4。。。。。
Dingyin仁兄你好!我去试试!
 
SDingyin仁兄这个electSort在哪?
 
你说SelectSort在哪?
这是排序函数阿,你愿意放哪里就放哪里
 
哦原来是这样!可是我应该用什么控件去实现这个排序?用文本框如何实现?
不好意思本人是一个愚笨还请仁兄再给说明一下!!!
 
天,不会吧,你连一点Delphi编程知识都不会?
 
是啊!我刚学!让您见笑了!语句基本看懂,可是我想用编辑框将它写出来,我该如何写?
即用三个edit然后再用一个edit来显示最后的排序结果,这个我该如何做?请赐教!!!!
 
var
iTemp:integer;
begin
if strtoint(edit1.text)<strtoint(edit2.text) then
begin
iTemp:=strtoint(edit1.text);
edit1.text:=edit2.text;
edit2.text:=inttostr(iTemp);
end;
if strtoint(edit1.text)<strtoint(edit3.text) then
begin
iTemp:=strtoint(edit1.text);
edit1.text:=edit3.text:
edit3.text:=inttostr(iTemp);
end;
edit4.text:=edit1.text+','+edit2.text+','+edit3.text;
end;
 
iTemp:=strtoint(edit1.text);
可能会报错
 
楼上诸位仁兄:1疯狂delphi所写的编译已通过。
需要加上一段就实现了我所要求的。代码如下:
if strtoint(edit2.text)<strtoint(edit3.text) then
begin
iTemp:=strtoint(edit2.text);
edit2.text:=edit3.text;
edit3.text:=inttostr(iTemp);
end;

wlmmlw所说,iTemp:=strtoint(edit1.text);
可能会出错。。。。。没有出现问题!


谢谢诸位
仁兄以后还有问题请多赐教!
 
可以任意多个整数或小数按从大到小或从小到大排序!
//Reverse=True表示从大到小,Reverse=False表示从小到大!
procedure SortNum(var NumList: array of Single; Reverse: Boolean);
procedure Exchange(var Num1, Num2: Single);
var
temp: Single;
begin
temp := Num2;
Num2 := Num1;
Num1 := temp;
end;
var
i,k: integer;
begin
for i := Low(NumList) to High(NumList) - 1 do
for k := Low(NumList) + i to High(NumList) do
case Reverse of
True:
if NumList < NumList[k] then
Exchange(NumList, NumList[k]);
False:
if NumList > NumList[k] then
Exchange(NumList, NumList[k]);
end;
end;

使用用如下:
建立新工程,在窗体上添加五个(自由决定)TEdit,一个TCheckBox(命名为:cbReverse)一个Button
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
NumList: array[1..5] of Single;
i: integer;
begin
for i := Low(NumList) to High(NumList) do
NumList := StrToFloat(TEdit(FindComponent('Edit' + IntToStr(i))).Text);
SortNum(NumList, cbReverse.Checked);
for i := Low(NumList) to High(NumList) do
TEdit(FindComponent('Edit' + IntToStr(i))).Text := FloatToStr(NumList);
end;
 
我用的这种方法在数据结构中叫“冒泡法”。
对于三个数可以如此一一列举,但是当要比较的数很多时一一列举就是一件非常痛苦的
事,因此最好是做一个两数相比较的函数,把要比较的数放入一个数组中,再循环调用
函数即可。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部