zoukankan      html  css  js  c++  java
  • Algs4-2.1.12令希尔排序打印出递增序列的每个元素所带来的比较次数和数组大小的比值

    2.1.12令希尔排序打印出递增序列的每个元素所带来的比较次数和数组大小的比值。编写一个测试用例对随机Double数组进行希尔排序,验证该值是一个小常数,数组大小按照10的冪次递增,不小于100。
    图片

    public class E2d1d12
    {
        public static int compareTimes=0;
        public static int maxRate=0;
        public static void sort(Comparable[] a)
        {
            int N=a.length;
            int h=1;
            while (h<N/3) h=3*h+1;
            while (h>=1)
            {
                compareTimes=0;
                for (int i=h;i<N;i++)
                {
                    for (int j=i;j>=h && less(a[j],a[j-h]);j-=h)
                        exch(a,j,j-h);
                  
                }
                 if(compareTimes/N>maxRate) maxRate= compareTimes/N;
                StdOut.printf("N=%d,h=%d,compareTimes=%d,rate=%d ",N,h,compareTimes,compareTimes/N);
                h=h/3;
            }
        }
       
        private static boolean less(Comparable v,Comparable w)
        {
            compareTimes++;
            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=0;i<a.length;i++)
                if(less(a[i],a[i-1])) return false;
            return true;
        }
       
        public static void main(String[] args)
        {
           
            for ( int N=100;N<=10000000;N=N*10)
            {
               Double[] a=new Double[N];
               for (int i=0;i<N;i++)
                   a[i]=StdRandom.uniform(100.0,100000000.0);
            sort(a);
            }
            StdOut.println("maxRate=" + maxRate);
        }
      
    }

  • 相关阅读:
    android Json解析详解
    Android 用ping的方法判断当前网络是否可用
    Android 监控网络状态
    Android TableLayout 常用的属性介绍及演示
    三星笔记本R428安装xp win7双系统,切换系统重启才能进入系统解决办法。
    解决Win8不能上网攻略第二版!三步秒杀原驱动
    Android三种实现自定义ProgressBar的方式介绍
    Android应用开发中半透明效果实现方案
    FFT算法的物理意义
    网络编程Socket之TCP之close/shutdown具体解释(续)
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860019.html
Copyright © 2011-2022 走看看