zoukankan      html  css  js  c++  java
  • Algs4-2.3.5只有两种主键值的数组排序

    1)从数组两端向中间找到第一对不同的值,然后将大值作为分界值。
    2)从数组两端向中间找,左端找到等于大值时停止找,右端找到小于大值时停止找。
    3)交换上面找到的两个值。
    4)如此反复第2、第3步,直到中间相遇时结束。
    注意:如果数据只有一种值时,代码不能正确运行。
    public class E2d3d5
    {
        public static void sort(Comparable[] a)
        {
           if (a.length<2) return;
           Comparable max=findMax(a);
           int lo=0;
           int hi=a.length-1;
            while(true)
              {
                while(less(a[lo],max)) lo++;
                while(!less(a[hi],max))hi--;
                if(lo>=hi) break;
                exch(a,lo,hi); 
              }
        }
     
        private static Comparable findMax(Comparable[] a)
        {
            Comparable max=a[0];
            int lo=1;
            int hi=a.length-1;
            while(lo<=hi)
            {
                if (less(max,a[lo])  || less(a[lo],max))
                {
                    if(less(max,a[lo])) max=a[lo];
                    break;
                }
               
                if (less(max,a[hi])  || less(a[hi],max))
                {
                    if(less(max,a[hi])) max=a[hi];
                    break;
                }
                lo++;
                hi--;
            }//end while
            return max;
        }//end findMax

       
        private static boolean less(Comparable v,Comparable w)
        { return v.compareTo(w)<0;}
       
        private static void exch(Comparable[] a,int i,int j)
        {
            Comparable  t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
       
        private static void show(Comparable[] a)
        {
            for (int i=0;i<a.length;i++)
                StdOut.print(a[i]+" ");
            StdOut.println();
        }
       
        public static boolean isSorted(Comparable[] a)
        {
            for (int i=1;i<a.length;i++)
                if(less(a[i],a[i-1])) return false;
            return true;
        }
       
        public static void main(String[] args)
        {
            String[] a=In.readStrings();
            sort(a);
            assert  isSorted(a);
            show(a);
        }
    }

  • 相关阅读:
    (转)elasticsearch5.2.2 压测配置
    (转) Elasticsearch 5.0 安装 Search Guard 5 插件
    (转)设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)
    分布式搜索elasticsearch配置文件详解
    (转)ActiveMQ的重连机制
    (转)Linux 命令--查看物理CPU个数、核数、逻辑CPU个数
    哈佛大学凌晨4点半的景象
    (转)关于ActiveMQ的配置
    最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络
    TensorFlow的开源与Hadoop的开源
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860190.html
Copyright © 2011-2022 走看看