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

  • 相关阅读:
    尚硅谷前端2020Web前端学习记录
    阿里网盘阿里云网盘内测资格获取,阿里网盘开通
    冰眼冷链物流监控平台-2020微服务项目实战
    探花交友智能推荐社交项目-2020Java大数据实战
    互联网Java工程师面试突击三季
    恋上数据结构与算法(一、二、三季)
    布客&#183;ApacheCN 编程/后端/大数据/人工智能学习资源 2020.9
    NumPy 基础知识·翻译完成
    NumPy 初学者指南中文第三版·翻译完成
    NumPy 秘籍中文第二版·翻译完成
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860019.html
Copyright © 2011-2022 走看看