算法笔记练习 4.6 two pointers 问题 C: 快速排序 qsort [2*]
题目
题目描述
输入n个整数,用快速排序的方法进行排序
Input
第一行数字n 代表接下来有n个整数
接下来n行,每行一个整数
Output
升序输出排序结果
每行一个数据
Sample Input
5
12
18
14
13
16
Sample Output
12
13
14
16
18
Hint
n<=5000
每个数据<=5000
思路
算法笔记P143
代码
#include <stdio.h>
// 对区间 [left, right] 进行划分
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, i;
while (scanf("%d", &n) != EOF) {
int nums[n];
for (i = 0; i < n; ++i)
scanf("%d", &nums[i]);
quickSort(nums, 0, n-1);
for (i = 0; i < n; ++i)
printf("%d\n", nums[i]);
}
return 0;
}