一道PASCAL程序题,输入a1,a2,a3,....a20(1)将它们从小到大排序后输出(2)将它们从大到小排序后输出

来源:百度知道 编辑:UC知道 时间:2024/06/04 11:33:48

program ss;
var a:array[1..20] of integer;
i,j,s:integer;
begin
for i:=1 to 20 do
read(a[i]);
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[i]<a[j] then begin s:=a[i]; a[i]:=a[j]; a[j]:=s; end;
for i:=1 to 20 do
write(a[i],' ');
end

快速排序(由小到大)
思想:设I为当前表头指针,J为当前表的尾指针,X为当前表的第一个元素,首先从当表前的最后J位置向前找到一个比X小的元素,此时将找到的小数放到当前表第一元素位置,I指针下移并向后找一个元素比X大的元素,此时将找到的大数放到当前表的J位置,不断按此方法循环此表,直到I等于J时退出循环,此时X的位置为I,将X放在I位置,也就是说X比表中前面数据大而比表中后面数据小,这此再用相同方法递归排序前面数据和后面数据。
参考子程序:
procedure quicksort(var a:arr;s,t:integer);
var I,j:integer;
begin
i:=s;j:=t;x:=a[s];{赋初值,确定当前表的上限s和下限t,并取区间上第一值给X}
while i<j do
begin
while (a[j]>=x) and (j>i) do j:=j-1;{J向前取值}
if j>i then begin a[i]:=a[j];i:=i+1; end;{将小的调到前}
while ( a[i]<=x) and (i<j) do i:=i+1;{I向后取值}
if i<j then begin a[j]:=a[i];j:=