zoukankan      html  css  js  c++  java
  • Rainbow Sort

    时间: 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]);
            }
        }
    }

  • 相关阅读:
    day 80 视图家族
    day 79 drf 多表关联操作
    day 78 drf 序列化
    day 77 drf中请求、渲染、解析、异常、响应模块的二次封装
    day 76 drf
    python小知识
    请求 渲染 解析 异常 响应模块
    子组件
    vue基础(2)
    vue基础
  • 原文地址:https://www.cnblogs.com/davidnyc/p/8454765.html
Copyright © 2011-2022 走看看