C++快速排序9行代码
2014-07-30 22:54
169 查看
#include <vector> #include <algorithm> #include <iostream> using namespace std; template<class Iter> void _sort(Iter array,int low,int high)//快速排序,数组头array,数组的闭区间[0,size-1] { if(low>=high)//数组长度至少不是一个 return; swap(array[low],array[low+rand()%(high-low+1)]);//使数组的枢纽为随机[0,size-1]中的一个值 int mid=low; for(int i=low;i<=high;++i)//遍历循环,如果遍历的值小于array[low],则将其划算在mid范围之内 { if(array[i]<array[low]) swap(array[i],array[++mid]); } swap(array[low],array[mid]);//因为在mid范围之内只有array[low]是大于mid范围小于mid范围之内的, //所以我们将low域与mid域的结尾交换已完成array[low]>array[0,mid],array[low]<array[low+1,high] _sort(array,low,mid-1); _sort(array,mid+1,high); } int main() { vector<int> ivec(10); generate(ivec.begin(),ivec.end(),rand); _sort(&ivec[0],0,ivec.size()-1); copy(ivec.begin(),ivec.end(),ostream_iterator<int>(cout," ")); }
在这个快速排序中,
1我们首先要求至少有2个数据进行排序,
2然后我们挑选任意一个域值作为枢纽,但是这个域还是在第一个kow位置,
3我们遍历一边数组,当有数组的域值小于枢纽是我们将这个小的与值囊括在mid之内,swap(array[++mid],array[i]);因为mid以内的值域都是小于array[low],大的值抛开在mid外就行了
4将mid值域low域交换,
5.分别递归
相关文章推荐
- 快速排序的递归和非递归实现 -----C++、JAVA代码实现
- 快速排序(伪代码 c/c++ python 实现)
- 算法代码实现之快速排序,C/C++实现
- 快速排序:源码(C++)--伪代码--时间复杂度解析
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- C++代码,数据结构-内部排序-交换排序-快速排序
- 快速排序c++原代码
- 交换排序——冒泡排序和快速排序,C++代码实现
- 快速排序的c++代码实现
- 算法代码实现之三向切分快速排序,C/C++实现
- 快速排序C++代码实现
- C++三种排序,快速排序、选择排序、冒泡排序----简单代码
- 霍尔快速排序 非递归 C++实现
- 插入排序——直接插入排序和希尔排序,C++代码实现
- 快速排序 C++
- 霍尔快速排序 非递归 C++实现
- 快速排序的C语言代码实现
- 直接查找排序,归并排序,快速排序,计数排序 ,堆排 C++实现
- 快速排序代码
- 稀疏矩阵的压缩存储及转置,快速转置法,C++代码实现