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);
        }
    }

  • 相关阅读:
    Dynamic Language Runtime 微软打出的王牌
    微软发布IronRuby
    点亮Web的灯silverlight
    Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR
    奚江华的几篇Silverlight文章
    Microsoft 的 OpenSource Licence
    CPython 和IronPython的基准测试
    Mobile上的Silverlight
    Switcher Vista Areo 工具
    ASP.NET AJAX 控件开发基础
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860190.html
Copyright © 2011-2022 走看看