SSL
洛谷 P1177 【模板】快速排序
题目描述
N个数,从小到大排序
分析
这题还要分析。。。
采用类分治算法,先以一个数作为关键字,进行模糊的一个排序(就是大的一边,小的一边),然后二分,继续。
就这么简单~
var
n:longint;
a:array[1..100000]of longint;
procedure init;
var
i:longint;
begin
readln(n);
for i:=1 to n do read(a[i]);
end;
procedure quicksort(low,high:longint);
var
i,j,mid,temp:longint;
begin
i:=low;j:=high;mid:=a[(low+high)div 2];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin
temp:=a[i];a[i]:=a[j];a[j]:=temp;
inc(i);dec(j);
end;
until i>j;
if i<high then quicksort(i,high);
if low<j then quicksort(low,j);
end;
procedure print;
var
i:longint;
begin
for i:=1 to n do write(a[i],' ');
end;
begin
init;
quicksort(1,n);
print;
end.