1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| package algorithm;
import java.util.Arrays;
public class SortColors {
public static void sortColors(int[] nums) { if (nums.length <= 1) { return; }
int red = 0; int white = 0; int blue = 0; for (int num : nums) { if (num == 0) { red++; } else if (num == 1) { white++; } else { blue++; } } Arrays.fill(nums, 0, red, 0); Arrays.fill(nums, red, red + white, 1); Arrays.fill(nums, red + white, red + white + blue, 2); }
public static void sortColors1(int[] nums) { int n = nums.length; int p0 = 0, p1 = 0; for (int i = 0; i < n; ++i) { if (nums[i] == 1) { int temp = nums[i]; nums[i] = nums[p1]; nums[p1] = temp; ++p1; } else if (nums[i] == 0) { int temp = nums[i]; nums[i] = nums[p0]; nums[p0] = temp; if (p0 < p1) { temp = nums[i]; nums[i] = nums[p1]; nums[p1] = temp; } ++p0; ++p1; } } }
public static void sortColors2(int[] nums) { int n = nums.length; int p0 = 0, p2 = n - 1; for (int i = 0; i <= p2; ++i) { while (i <= p2 && nums[i] == 2) { int temp = nums[i]; nums[i] = nums[p2]; nums[p2] = temp; } if (nums[i] == 0) { int temp = nums[i]; nums[i] = nums[p0]; nums[p0] = temp; ++p0; } } }
public static void main(String[] args) { int[] nums = new int[] {2,0,2,1,1,0}; sortColors(nums); print(nums);
nums = new int[] {2,0,1}; sortColors(nums); print(nums);
nums = new int[] {0}; sortColors(nums); print(nums);
nums = new int[] {1}; sortColors(nums); print(nums); }
private static void print(int[] nums) { for (int num : nums) { System.out.print(num); System.out.print(" "); } System.out.println(); } }
|