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