荷兰国旗问题,运用了三路快速排序的思想。
题目描述:给定一个数组,只有0,1,2三个数
[0,1,0,1,2,2,1,2,0];
利用三指针,[0,i] <val [i+1, j] =val; [k, high-1] >val;
具体思路如上图所示:
代码:
public class Solution {
public void quickSort(int[] arr) {
int i = -1;
int k = arr.length;
for(int j = 0; j < k;){
if(arr[j] == 1){
++j;
} else if (arr[j] == 0) {
swap(arr, i+1, j);
++i;
++j;
} else if (arr[j] == 2) {
swap(arr, j, k-1);
--k;
}
}
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = {0,1,0,1,2,1,2};
new Solution().quickSort();
System.out.println(Arrays.toString(arr));
}
}