码迷,mamicode.com
首页 > 其他好文 > 详细

Rainbow Sort

时间:2018-02-20 10:31:00      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:i++   length   for   ace   gpo   分享图片   main   技术   ==   

 

技术分享图片

时间: o(n) 空间 o(1): 没有recursion, 只有当前一层的call stack

sorting 如果是general sorting algo(1:不能对数组的性质加以限制) comparison based(2: sorting 只能通过两个数的比较来进行) , 最好的时间复杂度o(nlogn)

/*
* [,i) value 1
*  [i, j) value 2
*  (k,) value 3
*  the unknown places: [j, k]
* */
public class RainbowSort {
    public static void main(String[] args){
        int[] arr ={1,3,2,3,1,2} ;
        rainbowSort(arr);
        print(arr);
    }
    public static void rainbowSort(int[] arr){
        if (arr == null || arr.length ==0 ) return;
        /*
                   i
        *                             j
        *                         k
        *  1    1   2   2    2    2   3   3
        *
        * */
        int n = arr.length;
        int i = 0,j = 0, k = n-1;
        while (j<=k){
            if(arr[j]==1){
                swap(arr, i, j );
                i++;
                j++;
            } else if(arr[j]==2){
                j++;
            } else {
                swap(arr, j, k);
                k--;
            }
        }
    }
    public static void swap(int[] arr, int i, int j){
        int temp = arr[i] ;
        arr[i] = arr[j];
        arr[j] = temp;
    }
    public static void print(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

 

Rainbow Sort

标签:i++   length   for   ace   gpo   分享图片   main   技术   ==   

原文地址:https://www.cnblogs.com/davidnyc/p/8454765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!