Note:
想到双指针相向而行,当array[i], 遇到比pivot大的就swap(array, i, j—);
Key word:
比pivot小的放左边,比pivot大的放右边,不用维持相对顺序
class Solution {
public void partition(int[] array, int pivotIndex) {
int pivot = array[pivotIndex];
swap(array, pivotIndex, array.length - 1);
// 交换之后不保证相对顺序,两指针相向而行
int i = 0;
int j = array.length - 2;
while (i <= j) {
if (array[i] < pivot) {
i++;
} else {
swap(array, i, j--);
}
}
swap(array, i, array.length - 1);
}
private void swap(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
Complexity Analysis:
TC: O(N);
SC: O(1);