根据sort colors的思路,写了一个 sort four colors 的算法

public void sortColor(int[] a){
        if(a == null || a.length < 1){
            return;
        }
        // i - 0, k1 - 1, k2 - 2, j - 3
        int i = 0, k1 = 0, k2 = a.length - 1, j = a.length - 1;
        while(i < a.length - 1 && a[i] == 0)
            i ++;
        while(j >= 0 && a[j] == 3)
            j --;
        k1 = i; k2 = j;

        while(k1 <= k2){
            //k1
            if(a[k1] == 0){
                swap(a, k1, i);
                k1 ++;
                i ++;
            } else if (a[k1] == 1){
                k1 ++;
            } else if (a[k1] == 3){
                swap(a, k1, j);
                j --;
                if(k2 == j){
                    k2 --;
                }
            } else if (a[k1] == 2){
                swap(a, k1, k2);
            }


            //k2
            if(a[k2] == 3){
                swap(a, k2, j);
                    k2 --;
                    j --;
            } else if (a[k2] == 0){
                swap(a, i, k2);
                i ++;
                if(k1 == i){
                    k1 ++;
                }
            } else if (a[k2] == 1){
                swap(a, k1, k2);
            } else if (a[k2] == 2){
                k2 --;
            }
        }

    }



你可能感兴趣的:(根据sort colors的思路,写了一个 sort four colors 的算法)