关于排序的算法问题,也许对您来说很简单(30分)

  • 主题发起人 主题发起人 *HelloWorld*
  • 开始时间 开始时间
H

*HelloWorld*

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用插入法(是这个名字吗?)来实现对一个已有数组的重新排序。由于原来从来没学过算法,
所以在写程序的时候遇到了很大的问题,一直调不通。大家帮忙找一下错好吗?
我的部分程序在下面,arr是待排序的数组,sort是排好的数组。

const
arr:array[1..5] of integer=(5,4,2,3,1);


procedure TForm1.Button3Click(Sender: TObject);
var
i,j,Temp,Len:integer;
sort:array[1..5] of integer;
begin
sort[1]:=arr[1];
Len:=length(arr);
for i:=2 to Len do
begin
Temp:=arr;
if Temp>=arr[i-1] then
break
else
begin
sort:=sort[i-1];
for j:=1 to i-2 do
if Temp>=sort[i-j-1] then
begin
sort[i-j]:=Temp;
break;
end
else
sort[i-j]:=sort[i-j-1];
end;
end;

for i:=1 to Len do
listbox1.Items.Add(inttostr(sort));

end;
 
你写的程序好难懂啊,用冒泡排序吧,
或者直接都写到listbox中然后sorted:=true;
 
绝对正宗的"插入法"排序,如需要其它的方法,可再问我,:)
truecat6108@sohu.com
var
arr:array[1..5] of integer=(5,4,2,3,1);

procedure TForm1.Button1Click(Sender: TObject);
var i,j,len,temp:integer;
begin
Len:=length(arr);
for i:=2 to len do
begin
temp:=arr;
j:=i-1;
while (temp<arr[j])and(j>0) do
begin
arr[j+1]:=arr[j];
j:=j-1;
end;
arr[j+1]:=temp;
end;
for i:=1 to Len do
listbox1.Items.Add(inttostr(arr));

end;
 
冒泡排序法:(摘自Pascal程序设计 清大 郑启华)
Program sort(input,output);
var a:Array[1..20] OF real;
temp:real;
i,j:integer;
flag:boolean;
Begin
for i:=1 to 20 do
read(a);
i:=1;
Repeat
flag:=true;
For j:=j to 20-i do
IF a[j]<a[j+1]
Then Begin
temp:=a[j];
a[j]:=a[j+1];
a[j+1]:=temp;
flag:=false;
End
i:=i+1;
Until flag;
For i:=1 to 20 do
write(a[j])
END.

看得明吗? 不要老说“插入”嘛,毕竟有点....
就像电工来我家装电时在预定插座处写上的插座类型标记“抽插”或其它什么的。。
斑竹:轻松下嘛!不要赶我!!!!!!!!!
大文豪萧伯纳曾经说过:男人最喜欢搞两样东西:一是政治,二是玩弄n人d器g!!
电视剧“皇庭一号 5”里的对白,可不是我说的呀!!!
斑竹,别打我啦!!!我就消失...............
 
多人接受答案了。
 
后退
顶部