三色排序

题目

有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。
给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。

测试样例:[0,1,1,0,2,2],6
返回:[0,0,1,1,2,2]

思路

类似快速排序的划分过程,维护一个0区间和2区间,分别从-1和数组长度n开始。在遍历数组A的过程当中,
如果遍历的数字等于0,则与0区间的下一个数字交换,交换的数字一定是1。
如果遍历的数字等于2,则与2区间的上一个数字交换,此时交换的数字可能是0,1,2,所以需要再对此数进行判断。

import java.util.*;

public class ThreeColor {
    public int[] sortThreeColor(int[] A, int n) {
        int zeroZone=-1;
        int twoZone=n;
        for(int i=0;i<twoZone;i++){
            if(A[i]==0) swap(A,i,++zeroZone);
            else if(A[i]==2) {swap(A,i,--twoZone);i--;}
        }
        return A;
    }
    
     private void swap(int[] A, int i, int j) {
        int temp = A[i];
        A[i] = A[j];
        A[j] = temp;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 该文章总结自牛课网的在线算法课程(https://www.nowcoder.com/) 经典排序算法就是前面讲那几...
    锅与盆阅读 12,292评论 6 14
  • 有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。 给定一个只含0,1,2的...
    X_Y阅读 1,852评论 0 0
  • 该系列文章主要是记录下自己暑假这段时间的学习笔记,暑期也在实习,抽空学了很多,每个方面的知识我都会另起一篇博客去记...
    Yanci516阅读 14,224评论 6 19
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,903评论 6 13
  • 大概是贪恋美色。 大概是贪恋肌肤触感。舍不得肉体相拥时候的彼此需要。 嘴唇记住了你肌肤的纹理;鼻腔残留着你洗发露的...
    百鬼千行阅读 2,540评论 0 1