题目描述 Description
给出n和n个整数,希望你从小到大给他们排序
输入描述 Input Description
第一行一个正整数n
第二行n个用空格隔开的整数
输出描述 Output Description
输出仅一行,从小到大输出n个用空格隔开的整数
样例输入 Sample Input
3
3 1 2
样例输出 Sample Output
1 2 3
数据范围及提示 Data Size & Hint
1<=n<=100000
本题又是没有情境的练习题~~~
本题的范围给到了100000,O(n^2)的算法不行了,数据值域为10^9,计数排序又不适。老老实实打快排把,少年!!(PS:笔者忽略基数、归并等其他竞赛冷门的排序算法)由于使用了快速排序,时间复杂度O(nlog(n))
算法描述:输入,排序,输出。
Program sort; Var i,n:longint; a:array[1..101000]of longint; Procedure swap(var aa,bb:longint); var cc:longint; begin cc:=aa; aa:=bb; bb:=cc; end; Procedure qsort(l,r:longint); var mid,ll,rr:longint; begin ll:=l; rr:=r; mid:=a[random(rr-ll)+ll]; repeat while a[ll]<mid do inc(ll); while a[rr]>mid do dec(rr); if ll<=rr then begin swap(a[ll],a[rr]); inc(ll); dec(rr); end; until ll>rr; if l<rr then qsort(l,rr); if ll<r then qsort(ll,r); end; Begin randomize; readln(n); for i:=1 to n do read(a[i]); qsort(1,n); for i:=1 to n do write(a[i],' '); End.