快速排序

[复制链接]
发表于 2023-12-23 11:51:32 | 显示全部楼层 |阅读模式
快速排序
快速排序的思想是:先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束.
例:输入一组数据小到大排序.
程序1:
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x,t1:integer;
  begin
  i:=s;j:=t;x:=b;
  repeat
   while (b[j]>=x) and (j>i) do j:=j-1;
   if j>i then begin t1:=b; b:=b[j];b[j]:=t1;end;
   while (b<=x) and (i<j) do i:=i+1;
   if i<j then begin t1:=b[j];b[j]:=b;b:=t1; end
  until i=j;
  b:=x;
  i:=i+1;j:=j-1;
  if s<j then quicksort(b,s,j);
  if i<t then quicksort(b,i,t);
  end;
begin
write('input data:');
for i:=1 to n do read(a);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a:6);
writeln;
end.
 
程序2:
program kspv;
const n=7;
type
arr=array[1..n] of integer;
var
a:arr;
i:integer;
procedure quicksort(var b:arr; s,t:integer);
var i,j,x:integer;
  begin
  i:=s;j:=t;x:=b;
  repeat
   while (b[j]>=x) and (j>i) do j:=j-1;
   if j>i then begin  b:=b[j];i:=i+1;end;
   while (b<=x) and (i<j) do i:=i+1;
   if i<j then begin b[j]:=b;j:=j-1; end
  until i=j;
  b:=x;
  i:=i+1;j:=j-1;
  if s<j then quicksort(b,s,j);
  if i<t then quicksort(b,i,t);
  end;
begin
write('input data:');
for i:=1 to n do read(a);
writeln;
quicksort(a,1,n);
write('output data:');
for i:=1 to n do write(a:6);
writeln;
end.

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表