您的位置:首页 > 编程语言 > C语言/C++

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.分别递归
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: