快速排序算法
来源:互联网 发布:2017淘宝卖什么赚钱 编辑:程序博客网 时间:2024/05/29 13:47
反正都是抄书。
#include <iostream>#include <vector>#include <algorithm>using namespace std;//一趟快速排序的算法int QuickOnePass(vector<int>& DataArray, int leftPos, int rightPos){ int left = leftPos; int right = rightPos; int tmp = DataArray[left]; //腾空 left 位置 do { while(DataArray[right] >= tmp && right > left) { right--; } if (right > left) { DataArray[left] = DataArray[right]; left++; } while(DataArray[left] <= tmp && right > left) { left++; } if (right > left) { DataArray[right] = DataArray[left]; right--; } }while(left != right); DataArray[left] = tmp; return left;}/*快速排序: 通过一趟排序将待排序记录分割成两个独立的部分,其中一部分记录的关键字均小于等于另一部分记录的关键字,再分别对这两部分记录进行下一趟排序,最后使整个记录序列有序.*/void QuickSort(vector<int>& DataArray, int leftPos, int rightPos){ cout << endl << "排序中, leftPos = " << leftPos << ", rightPos = " << rightPos << ", 序列: "; for_each(DataArray.begin(), DataArray.end(), [](int value){cout << value << " ";}); if (leftPos < rightPos) { int midPos = QuickOnePass(DataArray, leftPos, rightPos); //将序列划分为两部分 QuickSort(DataArray, leftPos, midPos); //对左端的序列进行排序 QuickSort(DataArray, midPos + 1, rightPos); //对右端的序列进行排序 }}/* 时间复杂度:O(nlogn)。快速排序是不稳定的。 */int main(){ vector<int> vec = {1, 9, 2, 8, 3, 7, 4, 6, 5}; cout << endl << "排序前的序列是这样的: "; for_each(vec.begin(), vec.end(), [](int& value){cout << value << " ";}); QuickSort(vec, 0, vec.size()-1); cout << endl << "排序后的序列是这样的: "; for_each(vec.begin(), vec.end(), [](int& value){cout << value << " ";}); cin.get();}
结果:
排序前的序列是这样的: 1 9 2 8 3 7 4 6 5
排序中, leftPos = 0, rightPos = 8, 序列: 1 9 2 8 3 7 4 6 5
排序中, leftPos = 0, rightPos = 0, 序列: 1 9 2 8 3 7 4 6 5
排序中, leftPos = 1, rightPos = 8, 序列: 1 9 2 8 3 7 4 6 5
排序中, leftPos = 1, rightPos = 8, 序列: 1 5 2 8 3 7 4 6 9
排序中, leftPos = 1, rightPos = 4, 序列: 1 4 2 3 5 7 8 6 9
排序中, leftPos = 1, rightPos = 3, 序列: 1 3 2 4 5 7 8 6 9
排序中, leftPos = 1, rightPos = 2, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 1, rightPos = 1, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 2, rightPos = 2, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 3, rightPos = 3, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 4, rightPos = 4, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 5, rightPos = 8, 序列: 1 2 3 4 5 7 8 6 9
排序中, leftPos = 5, rightPos = 6, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 5, rightPos = 5, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 6, rightPos = 6, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 7, rightPos = 8, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 7, rightPos = 7, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 8, rightPos = 8, 序列: 1 2 3 4 5 6 7 8 9
排序中, leftPos = 9, rightPos = 8, 序列: 1 2 3 4 5 6 7 8 9
排序后的序列是这样的: 1 2 3 4 5 6 7 8 9
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 枚举的使用
- WIN7/8利用mklink将iTunes的备份目录转移
- 深入分析 verilog 阻塞和非阻塞赋值
- 第十周实验报告3
- UE/UI 美术时代到来,UI/UE革命。
- 快速排序算法
- Android 程式开发:(九)使用活动栏 —— 9.2添加ActionBar项目
- 第十周实验报告(三)
- XP,Windows无法连接到选定网络
- Freemarker模板引擎
- ubuntu下安装sublime text2
- 低版本IE下,LI高度BUG
- 待仔细解决的异常
- 改变被动,多份主动,懂得责任——没有参加九期作品展预演的一次反思