荷兰国旗问题: 给定一个数组 arr和一个数num, 请把小于num的数放在数组的坐标,等于num的数放到中间,大于num的数放到右边
package daytrain;
//荷兰国旗问题: 给定一个数组 arr和一个数num, 请把小于num的数放在数组的坐标,等于num的数放到中间,大于num的数放到右边
public class HeLan {
public static void partion(int[] arr, int L, int R, int num) {
int less = L-1;
int more = R+1;
int cur = L;
while (cur < more) {
if (arr[cur] < num) {
swap(arr, ++less, cur++);
}else if(arr[cur] > num) {
swap(arr, --more, cur);
}else {
cur++;
}
}
}
//首先写一个交换顺序的方法
public static 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 = {4, 2, 8, 6, 3};
partion(arr, 0, arr.length-1, 3);
for (int i : arr) {
System.out.println(i);
}
}
}