DS排序–快速排序
题目描述
给出一个数据序列,使用快速排序算法进行从小到大的排序 给出一个数据序列,使用快速排序算法进行从小到大的排序 给出一个数据序列,使用快速排序算法进行从小到大的排序
–程序要求–
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio
程序中若include多过一个头文件,不看代码,作0分处理
不允许使用第三方对象或函数实现本题的要求
输入
第一行输入 t t t,表示有 t t t个测试示例
第二行输入 n n n,表示第一个示例有 n n n个数据
第三行输入 n n n个数据,都是正整数,数据之间用空格隔开
以此类推
输出
每组测试数据,输出每趟快排的结果,即每次排好一个数字结果(长度为1的子序列,不用排,不用输出)。不同测试数据间用空行分隔。
输入样例:
2
6
111 22 6 444 333 55
8
77 555 33 1 444 77 666 2222
输出样例:
55 22 6 111 333 444
6 22 55 111 333 444
6 22 55 111 333 444
6 22 55 111 333 444
1 33 77 555 444 77 666 2222
1 33 77 555 444 77 666 2222
1 33 77 77 444 555 666 2222
1 33 77 77 444 555 666 2222
1 33 77 77 444 555 666 2222
参考代码:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
void display(int *arr, int len) {
for (int i = 0; i < len; ++i) {
cout << arr[i];
if (i != len - 1)
cout << ' ';
}
cout << endl;
}
int part_sort(int *arr, int low, int high) {
int num = arr[low];
while (low < high) {
while (low < high && arr[high] >= num)
high--;
arr[low] = arr[high];
while (low < high && arr[low] < num)
low++;
arr[high] = arr[low];
}
arr[high] = num;
return high;
}
void quicksort(int *arr, int low, int high, int len) {
if (low < high) {
int mid = part_sort(arr, low, high);
display(arr, len);
quicksort(arr, low, mid - 1, len);
quicksort(arr, mid + 1, high, len);
}
}
int main() {
int T;
cin >> T;
while (T--) {
int len;
cin >> len;
auto *arr = new int[len];
for (int i = 0; i < len; ++i)
cin >> arr[i];
quicksort(arr, 0, len - 1, len);
cout << endl;
}
return 0;
}