快速排序
Description
有n个无序的整数,试把它们从小到大排序。
要求:本题采用快速排序法来完成。
Input
输入共有2行,第一行是一个整数n ( 0 < n ≤ 100000 ),表示有n个整数。
第二行是n个整数。
Output
输出每一次Partition之后的结果。规定每次选取"枢轴",都是选择当前区间的第一个元素。
Sample Input
14
39 80 76 41 13 29 50 78 30 11 100 7 41 86
Sample Output
7 11 30 29 13 39 50 78 41 76 100 80 41 86
7 11 30 29 13 39 50 78 41 76 100 80 41 86
7 11 30 29 13 39 50 78 41 76 100 80 41 86
7 11 13 29 30 39 50 78 41 76 100 80 41 86
7 11 13 29 30 39 50 78 41 76 100 80 41 86
7 11 13 29 30 39 41 41 50 76 100 80 78 86
7 11 13 29 30 39 41 41 50 76 100 80 78 86
7 11 13 29 30 39 41 41 50 76 100 80 78 86
7 11 13 29 30 39 41 41 50 76 86 80 78 100
7 11 13 29 30 39 41 41 50 76 78 80 86 100
7 11 13 29 30 39 41 41 50 76 78 80 86 100
#include<iostream> #include<stdio.h> using namespace std; int a[100002]; int n; void qsort(int p,int r) { if(p>=r) { return ; } int x = a[p]; //基准数 int i = p,j=r; while(i!=j) { while(a[j]>=x&&i<j)j--;a[i]=a[j]; while(a[i]<=x&&i<j)i++;a[j]=a[i]; } a[i]=x; for(int k=1; k<=n; k++) { cout << a[k] ; if(k==n)printf("\n"); else printf(" "); } qsort(p,i-1); qsort(i+1,r); } int main() { cin >> n; for(int i=1; i<=n; i++) { cin >> a[i]; } qsort(1,n); return 0; }