题目链接:http://codeup.cn/problem.php?cid=100000586&pid=3
题目描述
二分递归快排(Qsort)
用二分递归的方法实现快排
输入
第一行一个数据n,表示有n个数要排序。接下来n行每行一个<=10^7的整数。
输出
n行,由小到大排序后的数据
代码
#include<stdio.h>
const int maxn = 5010;
int a[maxn];
int Partition(int a[], int left, int right) {
int temp = a[left];
while(left < right) {
while(left < right && a[right] > temp)
right--;
a[left] = a[right];
while(left < right && a[left] <= temp)
left++;
a[right] = a[left];
}
a[left] = temp;
return left;
}
void quickSort(int a[], int left, int right) {
if(left < right) {
int pos = Partition(a, left, right);
quickSort(a, left, pos - 1);
quickSort(a, pos + 1, right);
}
}
int main () {
int n;
while(scanf("%d", &n) != EOF){
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
quickSort(a, 0, n - 1);
for(int i = 0; i < n; i++)
printf("%d\n", a[i]);
}
return 0;
}