快速排序 时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
给定一个数列,用快速排序算法把它排成升序。
输入:
第一行是一个整数n,表示要排序的数的个数;下面一行是用空格隔开的n个整数。
输出:
输出排序后的数列,每个数字占一行。
输入样例:
5
3 2 1 4 5
输出样例:
1
2
3
4
5
代码:
#include<stdio.h> #include<stdlib.h> int *a; int Partition(int low,int high) { int temp; int pivotkey=a[low]; while(low<high) { while(low<high&&a[high]>=pivotkey) { --high; } temp=a[low]; a[low]=a[high]; a[high]=temp; while(low<high&&a[low]<=pivotkey) { low++; } temp=a[low]; a[low]=a[high]; a[high]=temp; } return low; } void QSort(int low,int high) { int pivotloc; if (low < high) { pivotloc = Partition(low, high); // 将L.r[low..high]一分为二 QSort(low, pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置 QSort(pivotloc+1, high); // 对高子表递归排序 } } int main() { int n,i; scanf("%d",&n); a=(int *)malloc((n+1)*sizeof(int)); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } QSort(1,n); for(i=1;i<=n;i++) { printf("%d\n",a[i]); } return 0; }