第1题: “振荡”冒泡排序:
将n个整数从小到大排序(n≤1000),下面的程序是对普通冒泡法排序的一个改进:先从一端开始扫描,进行比较、交换,然后改变下一趟扫描的方向,作同样的处理,使冒泡过程来回“振荡”进行,并逐步缩小扫描范围,直到n个数都排好序为止。
program t2014_5;
var n,i:integer;
a: array[1..1000] of integer ;
procedure shakesort(x:integer);
var i,h,t,k:integer;
b:boolean;
begin
h:=1;t:=x;
repeat
b:=true ;
for i:=h to t-1 do
if a[i]>a[i+1] then begin
k:=a[i];a[i]:=a[i+1];a[i+1]:=k;
b:=false;
end;
t:=t-1;
for i:=t-1 downto h do
if a[i]>a[i+1] then begin
k:=a[i];a[i]:=a[i+1];a[i+1]:=k;
b:=false;
end;
h:=h+1
until b;
end;
begin
randomize;readln(n);
for i:=1 to n do a[i]:=random(1000)+1;
shakesort(n) ;
for i:=1 to n do write(a[i]:4);
writeln
end.