算法--三色球分类

现有n个红白蓝三种不同颜色的小球,乱序排列在一起,请通过两两交换任意两个球,使得从左至右,依次是一些红球、一些白球、一些蓝球。

public class DutchNationalFlag {

    private void swap(int[] a, int index1, int index2) {
        int temp = a[index1];
        a[index1] = a[index2];
        a[index2] = temp;
    }

    public void dutchNationalFlag(int[] a, int n) {
        //红色游标
        int left = 0;
        //蓝色游标
        int right = n - 1;
        //白色游标
        int cur = 1;
        while (cur <= right) {
            if (a[cur] == 0) { //红色
                swap(a, left, cur);
                left++;
            } else if (a[cur] == 1) { //白色
                cur++;
            } else { //蓝色
                swap(a, cur, right);
                right--;
            }
        }
    }

    public static void main(String[] args) {
        int[] a = { 0, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1 };
        DutchNationalFlag dFlag = new DutchNationalFlag();
        dFlag.dutchNationalFlag(a, a.length);
        for (int value : a) {
            System.out.print(value);
            System.out.print(" ");
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 排列组合的定义 排列的定义:从n个不同元素中,任意取m个元素,m≤n且m和n都是自然数,按照一定顺序排成一列,叫做...
    伍帆阅读 10,665评论 6 10
  • 荷兰国旗 题目描述: 拿破仑席卷欧洲大陆之后,代表自由,平等,博爱的竖色三色旗也风靡一时。荷兰国旗就是一面三色旗(...
    MinoyJet阅读 5,555评论 0 0
  • 圆 是天上一轮皓月 充盈着诗篇 挂满了想念 源 是山里一泓清泉 唱响了安静 蹦跳着撒欢 园 是家乡一方秋田 碧绿...
    一窗秋阳阅读 2,720评论 0 0
  • 教育家不是培养出来的,通过教育实践,凝炼出教育思想,回到教育起点。教育是善良人的事业,对生命的态度与认知,做教师...
    韩妮妮阅读 4,676评论 0 1
  • 自带悲伤的病菌 从这篇文章,也许便开始了,短暂,自嘲的书写旅程。...
    54454b80f04d阅读 1,864评论 0 1

友情链接更多精彩内容