算法--三色排序练习题

Posted 日月的弯刀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法--三色排序练习题相关的知识,希望对你有一定的参考价值。

 


三色排序

 
 

第17节 三色排序练习题

 

有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。

给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。

测试样例:
[0,1,1,0,2,2],6
返回:[0,0,1,1,2,2]
 
 
1
import java.util.*;
2

3
public class ThreeColor {
4
   public int[] sortThreeColor(int[] A, int n) {
5
        int zeroAreaIndex = -1;//0区域当前最后位置
6
        int twoAreaIndex = n;//2区域当前最前位置
7
        for(int i=0; i<A.length; ){
8
            if(A[i] == 1) i++;
9
            else if(A[i] == 0){
10
                swap(A, ++zeroAreaIndex, i);//当前位置为0,和0区域的下一个位置进行交换(0 0 0 1 0 2 0 1)
11
                i++;
12
            }
13
            else{//当前位置为2,那么和2区域的前一个位置进行交换(0 0 0 1 2 1 1 1 0 2)
14
                swap(A, --twoAreaIndex, i);
15
                if(i == twoAreaIndex) break;
16
                /**
17
                 * 此时从2区域前方交换到了当前i位置,不知道2区域前方这个数是1还是2还是0?
18
                 * 如果是1的话,i++,继续下一次循环;
19
                 * 如果是0或者2的话,i保持不变
20
                 */
21
                if(A[i] == 1) i++;
22
                else continue;
23
            }
24
            if(i == twoAreaIndex) break;
25
        }
26
        return A;
27
    }
28

29
    public void swap(int[] arr, int m, int n) {
30
        int temp = arr[m];
31
        arr[m] = arr[n];
32
        arr[n] = temp;
33
    }
34
}
 
 
您的代码已保存
答案正确:恭喜!您提交的程序通过了所有的测试用例

以上是关于算法--三色排序练习题的主要内容,如果未能解决你的问题,请参考以下文章

第2章 排序 | | 第17节 三色排序练习题

三色图算法和常数

编程之法:面试和算法心得(荷兰国旗)

从搜索文档中查找最小片段的算法?

三色排序

各种排序算法整理(附带习题及代码)