数组分区与双指针交换法介绍
数组分区的概念:
其实就是指将数组的元素分为两部分,比如:分为偶数与奇数,分为非数字字符与数字字符,分为质数与非质数,分为大于 指定值的数,和小于指定值的数。

双指针交换法介绍:
由于需要分区,我们呢往往需要最快的分区速度,而仅需一次遍历就能完成分区操作,无需移动数组排列的双指针交换法 接受了这个任务。
原理:
假如满足条件的元素(假设条件是奇数)在左区,不满足条件的元素(偶数)在右区,那么我们的思路就是:
双指针: pLeft = 0 , pRight = arr.size -1
- pLeft 从左至右遍历,当碰到不满足条件的元素,我们暂停 pLeft 移动
- pRight 从右至左遍历,当碰到满足条件的元素,我们暂停 pRight 移动
- 交换两个指针指向的元素
- 重复 1,2,3 步骤
图例:

编写进行分区操作的双指针交换法,考虑可扩展性
我们需要两个函数来完成双指针交换法:
- 判断数字应该是属于数组前半部分还是后半部分的标准 : bool isEven(int n)
- 拆分数组的操作 : void Recorder(int *pData,unsigned int length,bool (*func)(int))

本文介绍了数组分区的概念,重点讲述了使用双指针交换法进行分区操作的方法。通过设置两个指针pLeft和pRight,分别从数组两端遍历,遇到不符合条件的元素进行交换,达到一次遍历完成分区的效果。并提供了相应的判断标准函数和拆分数组的函数实现,同时附带了测试样例。
最低0.47元/天 解锁文章
2540

被折叠的 条评论
为什么被折叠?



