已解决
3. 快速排序
来自网友在路上 175875提问 提问时间:2023-10-31 22:03:37阅读次数: 75
最佳答案 问答题库758位专家为你答疑解惑
要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。
注:1,cutoff值为5,不足cutoff使用插入排序。
2,输入、输出格式参见测试用例0。
- 41↵
- 17↵
- 34↵
- 0↵
- 19↵
- #↵
- After Sorting:↵
- 0 17 19 34 41 ↵
- Median3 Value:↵
- none↵
- 61↵
- 59↵
- 82↵
- -10↵
- 31↵
- -2↵
- -3↵
- 10↵
- 2↵
- 108↵
- 12↵
- 80↵
- -21↵
- 127↵
- 12↵
- #↵
- After Sorting:↵
- -21 -10 -3 -2 2 10 12 12 31 59 61 80 82 108 127 ↵
- Median3 Value:↵
- 12 -3 61 ↵
C++代码
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;const int cutoff = 5;
vector<int> median;// 插入排序
void insertionSort(vector<int>& arr, int left, int right) {for (int i = left + 1; i <= right; i++) {int tmp = arr[i], j = i;for (; j > left && arr[j - 1] > tmp; j--)arr[j] = arr[j - 1];arr[j] = tmp;}
}// 计算中位数
void median3(vector<int>& arr, int left, int right) {int center = (left + right) / 2;if (arr[left] > arr[center])swap(arr[left], arr[center]);if (arr[left] > arr[right])swap(arr[left], arr[right]);if (arr[center] > arr[right])swap(arr[center], arr[right]);//将中位数放到right-1位置作为枢纽元 swap(arr[center], arr[right - 1]);
}// 快速排序
void quickSort(vector<int>& arr, int left, int right) {if (right - left + 1 <= cutoff) {insertionSort(arr, left, right);return;}median3(arr, left, right);median.push_back(arr[right - 1]); int i = left, j = right - 1;int pivot = arr[right - 1];for (;;) {while (arr[++i] < pivot) {}while (arr[--j] > pivot) {}if (i < j)swap(arr[i], arr[j]);elsebreak;}swap(arr[i], arr[right - 1]);quickSort(arr, left, i - 1);quickSort(arr, i + 1, right);
}// 主函数处理输入输出
int main() {int num;vector<int> nums;while (cin >> num && cin.peek() != '#') {nums.push_back(num);}quickSort(nums, 0, nums.size() - 1);cout << "After Sorting:" << endl;for (const auto& n : nums) {cout << n << " ";}cout << endl;cout << "Median3 Value:" << endl;if (nums.size() > 5) {for (int i = 0; i < median.size(); i++) {cout << median[i] << " ";}}else cout << "none";cout << endl;return 0;
}
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"3. 快速排序":http://eshow365.cn/6-29035-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 华纳云 宝塔怎么配置香港服务器多ip?
- 下一篇: 深度学习02-数据集格式转换