partition函数

本文详细探讨了C++标准库中`std::partition`函数的使用和原理,包括其在排序算法中的作用,如何根据谓词进行元素划分,并通过实例代码展示了如何在实际编程中应用`std::partition`来优化数据处理流程。


前提
需要有一个用来进行对比的基准
partition函数是将一个数组分成三部分:
左部分:是<基准
中部分:是==基准
右部分:是>基准


left:左部分的右边界
index:中部分右边界的右边
right:右部分的左边界


遍历过程中,左部分和中部分一直是重合的,中部分和右部分的边界在努力的靠近并准备合并。


详细
当arr[index]<基准时,左部分需要扩充,即:swap(arr,++left,index++);
当arr[index]==基准时,中部分需要扩充,即index直接++;
当arr[index]>基准时,右部分需要扩充,但是因为right左边和index右边为模糊区域(不知道其中的元素和基准的
大小,所以交换后,index不变化)即:swap(arr,index,--right)


初始left = -1; index = 0;right = len;


代码:

void swap(int arr[],int index1,int index2)
{
int tmp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = tmp;
}
void partition(int arr[],int len)
{
//假设数组的元素只可能是0,1,2。
int left = -1;
int index = 0;
int right = len;
while(index<right)
{
if(arr[index]==0)
{
swap(arr,++left,index++);
}
else if(arr[index]==2)
{
swap(arr,index,--right);
}
else
{
index++;
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值