普通快速排序
本站文章均为Jensen抹茶喵原创,转载务必在明显处注明:
转载自【博客园】 原文链接:http://www.cnblogs.com/JensenCat/p/5006858.html
普通快排第一轮的思想:
下面上C++实现代码
#include<iostream> using namespace std; //////////////////////////////////// //数组类型快速排序(普通快排) /////////////////////////////////// template<typename T> void quickSort(T* container ,unsigned int beginIdx ,unsigned int endIdx) { //递归跳出条件 if(beginIdx >= endIdx) { return; } //取中间值,开头索引以及末尾末尾 unsigned int p = beginIdx; unsigned int q = endIdx; T midValue = container[beginIdx]; bool bIsReverse = false;//是否反向 while(p != q) { if(false == bIsReverse) { //从后往前 if(container[q] < midValue) { std::swap(container[q] , container[p]); bIsReverse = true; } else { --q; } } else { //从前到后 if(container[p] > midValue) { std::swap(container[p] , container[q]); bIsReverse = false; } else { ++p; } } } //上面完成一轮..开始递归执行自己 quickSort(container , beginIdx , p - 1); quickSort(container , p + 1 , endIdx); } void main() { //快排例子 int naArray[9] = { 5 , 7 , 8 ,2 , 1 ,3 ,4 , 8 , 9}; quickSort(naArray , 0 , 8); for(int i=0;i<9;++i) { cout<<naArray[i]<<endl; } system("pause"); }
输出结果: