数组划分就是根据条件将数组划分成几类,将同类放在一起,该题就是将数组非0元素和0元素分开
原理:双指针算法(利用数组下标充当双指针)
两个指针作用:
cur:从左往右扫描数组,遍历数组
dest:已处理的区间内,非零元素的最后一个位置
cur左边表示处理过的,右边是待处理的;
[0,dest]这个区间是非0元素,[dest + 1, cur -1]这个区间是0元素,[cur , n - 1]是待处理的元素

如何做到:
cur从前往后遍历过程:
1、遇到0元素:cur++
2、遇到非0元素:
swap(dest + 1, cur);
dest++,cur++;
代码
class Solution {
public void moveZeroes(int[] nums) {
int cur = 0;
int dest = -1;
while (cur != nums.length) {
if (nums[cur] != 0) {
dest++;
int temp = nums[dest];
nums[dest] = nums[cur];
nums[cur] = temp;
}
cur++;
}
}
}这个数组划分也是快速排序里最核心的一步。