You are not suppose to use the library‘s sort function for this problem.
思路1:直接遍历数组统计三种颜色的个数然后依次填充,复杂度O(N)
代码1:
public void sortColors1(int[] A) {//统计1,2,3的个数 int [] colorCount = new int[3]; for(int i =0; i < A.length; ++i){ switch (A[i]){ case 0: colorCount[0] ++; break; case 1: colorCount[1] ++; break; case 2: colorCount[2] ++; break; } } int from, i = 0, to = 0; while (i < colorCount.length){ from = to; to = to + colorCount[i]; Arrays.fill(A, from ,to,i); i ++; } }
public void sortColors(int[] A) {//用快速排序的思想, final int RED = 0, WHITE = 1, BLUE = 2; int l =0, r = A.length - 1,mid = l; while (mid <= r){ if(A[mid] == RED){ int temp = A[mid]; A[mid] = A[l]; A[l] = temp; l ++; mid ++; }else if(A[mid] == BLUE){ int temp = A[mid]; A[mid] = A[r]; A[r] = temp; r --; }else { mid ++; } } }
原文:http://blog.csdn.net/youmengjiuzhuiba/article/details/44900249