快速排序里面的Partition函数

Partition函数有两种实现方法,单边扫描和双边扫描

Partition函数的作用就是在数组中选择一个数字,接下来把数组的数字分成两个部分,比选择的数字小的移动到数组的左边,比选择的数字大的移动到数组的右边。

单边扫描:首先随机选择一个数字,与数组最后一个元素进行交换,变量i从左到右进行扫描,每一个数都与最后一个元素进行比较,如果比最后一个元素小,扫描变量i的元素与标记变量small的元素进行交换,同时标记变量small++;如果比最后一个元素大,直接进行i++操作。最后交换最后一个元素和标记变量small对应的元素即可


双边扫描:选择第一个元素,作为标记元素,使用两个变量i,j进行扫描,变量i从左边开始扫描,变量j从右边开始扫描。从右边扫描,如果比标记元素大,则继续扫描j--,直到比标记元素小,则将j对应的元素赋值给i对应的元素。从左边扫描,如果比标记元素小,则继续扫描i++,直到比标记元素大,则将i对应的元素赋值给j对应的元素。



代码实现如下:

//单边扫描
int partition(int array[],int start,int end)
{
	if(start>=end)
		return;
	int index=RandomInRange(start,end);
	int indexvalue=array[index];
	Swap(&array[index],&array[end]);
	int small=strat;
	for(int i=start;i<=end;i++)
	{
		if(array[i]<indexvalue)
		{
			Swap(&array[i],&array[small]);
			small++;
			
		}
		
	}
	Swap(&array[small],&array[end]);
	return small;
}


//双边扫描
int partition(int array[],int start,int end)
{
	int i=start;
	int j=end;
	int index=start;
	if(start>=end)
		return;
	while(i<j)
	{
		while(i<j && array[index]<=array[j])
			j--;
		if(i<j)
			array[i++]=array[j];
		while(i<j && array[index]>=array[i])
			i++;
		if(i<j)
			array[j--]=array[i];
	}
	
Swap(&array[i],&array[index]);
return i;}










  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值