#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.分别递归