• 算法--三色排序(经典的荷兰国旗问题)



    三色排序

     
     

    第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
    }
     
     
    您的代码已保存
    答案正确:恭喜!您提交的程序通过了所有的测试用例
  • 相关阅读:
    冲刺第十三天
    冲刺第十二天
    冲刺第十一天
    Android Studio三种运行方法
    第十三周学习进度
    冲刺第一阶段意见评论
    第十二周学习进度
    冲刺第十天
    大二暑假周总结(五)
    大二暑假周总结(四)
  • 原文地址:https://www.cnblogs.com/haozhengfei/p/7cb5d12d6ba82a0e3d8e0e291e8941f2.html
Copyright © 2020-2023  润新知