Noj 1064 快速排序
快速排序
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KB比赛描述
给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中快速排序算法进行排序,并输出排序最后结果的相应序列。
输入
共两行,第一行给出排序元素数目n,第二行给出n个元素,1≤n≤100000,每个元素值范围为 [0,100000)
输出
一行,输出排序结果。
样例输入
7
48 36 68 72 12 48 2
样例输出
2 12 36 48 48 68 72
代码:
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 5 int n; 6 7 void swap(int &a,int &b) 8 { 9 int t=a;a=b;b=t; 10 } 11 12 int partition(int a[],int l,int r) 13 { 14 int i,j; 15 i=l,j=r+1;; 16 while(1) 17 { 18 while(i<=r&&a[++i]<a[l]); 19 while(j>=l&&a[--j]>a[l]); 20 if(i>=j)break; 21 swap(a[i],a[j]); 22 } 23 swap(a[l],a[j]); 24 return j; 25 } 26 27 void Qsort(int a[],int l,int r) 28 { 29 if(r<=l)return; 30 int j=partition(a,l,r); 31 Qsort(a,l,j-1); 32 Qsort(a,j+1,r); 33 } 34 35 int main() 36 { 37 //freopen("in.txt","r",stdin); 38 int i; 39 scanf("%d",&n); 40 int *p=(int*)malloc(sizeof(int)*(n+1)); 41 for(i=1;i<n+1;i++) 42 scanf("%d",&p[i]); 43 Qsort(p,1,n); 44 for(i=1;i<=n;i++) 45 if(i<n) 46 printf("%d ",p[i]); 47 else 48 printf("%d\n",p[i]); 49 free(p); 50 return 0; 51 }