利用STL中的partition完成快排

学习《STL源码剖析》p354时,发现STL中已有partition函数,这不禁让人联想到c语言实现的快排:
int Partition(int k[], int low, int high)
{
	int point;

	point = k[low];

	while( low < high )
	{
		while( low < high && k[high] >= point )
		{
			high--;
		}
		swap(k, low, high);
		
		while( low < high && k[low] <= point )
		{
			low++;
		}
		swap(k, low, high);
	}

	return low;
}



结合STL中的原型,我们很容易就想到使用partition(vector.begin(),vector.end(),func1());来完成,其中func1是判断vector中元素是否满足某条件所用的判断函数,一般来说该函数是个仿函数,然而仿函数在这个情形下显然又是不好接受参数的,那么我们该怎么办呢??


实际上STL考虑到这点,可以使用bind2nd函数来完成这种事情,因此partition函数的使用可以如下:

typedef vector <int>::iterator Iter;
vector <int> V;
void qsort(Iter left,Iter right)
{
    if(left>=right) return ;
        Iter mid=left;
            mid=partition(left+1,right,bind2nd(less <int>(),*mid));
        iter_swap(mid-1,left);
    qsort(left,mid-1);
    qsort(mid,right);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值