题目描述:
给定一个数组arr,和一个数num,请把小于num的数放在数组的 左边,等于num的数放在数组的中间,大于num的数放在数组的右边
package lesson01;
import java.util.Random;
public class demo03_NetherlandsFlag {
public static void main(String[] args) {
int n = 10;
int[] arr = generateRandomArray(n);
printArray(arr);
int num = 5;
int l = 0, r = arr.length - 1;
int[] a = partition(arr, l, r, num);
System.out.println();
printArray(a);
}
public static int[] partition(int[] arr, int l, int r, int num) {
int curlen = l;
int less = l - 1;
int more = r + 1;
while (curlen < more) {
if (arr[curlen] < num) {
swap(arr, ++less, curlen++);
} else if (arr[curlen] > num) {
swap(arr, --more, curlen);
} else {
curlen++;
}
}
return arr;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(" " + arr[i]);
}
public static int[] generateRandomArray(int n) {
Random r = new Random();
int arr[] = new int[n];
for (int i = 0; i < n; i++)
arr[i] = (int) (r.nextInt(n) + 1);
return arr;
}
}