博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法(Algorithms)第4版 练习 2.1.24
阅读量:5981 次
发布时间:2019-06-20

本文共 3165 字,大约阅读时间需要 10 分钟。

代码实现:

package com.qiusongde;import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdOut;public class InsertionWithSentinel {        public static void sort(Comparable[] a) {                int N = a.length;                for(int i = N - 1; i > 0; i--) {            if(less(a[i], a[i-1])) {                exch(a, i, i-1);//                show(a);            }        }                for(int i = 2; i < N; i++) {            for(int j = i; less(a[j], a[j-1]); j--) {                exch(a, j, j-1);            }//            show(a);        }            }        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) {                //print the array, on a single line.        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) {        //Read strings from standard input, sort them, and print.        String[] a = In.readStrings();        show(a);        sort(a);        assert isSorted(a);        show(a);    }}

 

SortCompare:

package com.qiusongde;import edu.princeton.cs.algs4.Shell;import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdRandom;public class SortCompare {    public static double timeRandomInput(String alg, int N, int T) {                double total = 0.0;                Double[] a = new Double[N];        for(int t = 0; t < T; t++) {            for(int i = 0; i < N; i++)                a[i] = StdRandom.uniform();            total += time(alg, a);        }                return total;            }        public static double time(String alg, Double[] a) {                Stopwatch timer = new Stopwatch();                if(alg.equals("Selection"))            Selection.sort(a);        if(alg.equals("Insertion"))            Insertion.sort(a);        if(alg.equals("InsertionHalfExchange"))            InsertionHalfExchange.sort(a);        if(alg.equals("InsertionWithSentinel"))            InsertionWithSentinel.sort(a);        if(alg.equals("Shell"))            Shell.sort(a);                return timer.elapsedTime();            }        public static void main(String[] args) {                String alg1 = "Insertion";        String alg2 = "InsertionWithSentinel";        int N = 2000;        int T = 1000;                double t1 = timeRandomInput(alg1, N, T);        double t2 = timeRandomInput(alg2, N, T);                StdOut.printf("For %d random Doubles %d trials\n", N, T, alg1);        StdOut.printf("%s is %.1fs %s is %.1fs", alg1, t1, alg2, t2);            }}

 

 

测试结果:

For 2000 random Doubles 1000 trialsInsertion is 4.5s InsertionWithSentinel is 3.7s

 

转载于:https://www.cnblogs.com/songdechiu/p/6603653.html

你可能感兴趣的文章
Behavioral模式之Memento模式
查看>>
Work Management Service application in SharePoint 2016
查看>>
Dos 改动IP 地址
查看>>
Laravel 源码解读:php artisan make:auth
查看>>
【转】ionic run android 成功launch success,但是genymotion虚拟机没有显示
查看>>
苹果在GitHub上正式开源iOS内核源码
查看>>
测试人员面临的测试挑战和必备技能
查看>>
使用Flutter之后,我们的CPU占用率降了50%
查看>>
同事反馈环:为什么度量和会议还不够充分
查看>>
[转]十问 Linux 虚拟内存管理 (glibc)
查看>>
老司机带你深入浅出 Collection
查看>>
查询系统-vba
查看>>
[译]Spring Session 与 Spring Security
查看>>
python学习笔记(05)
查看>>
JAVA BIO 服务器与客户端实现示例
查看>>
《Cisco IPv6网络实现技术(修订版)》一2.6 配置练习:使用Cisco路由器配置一个IPv6网络...
查看>>
《可穿戴创意设计:技术与时尚的融合》一一第2章 与可穿戴设备有关的故事...
查看>>
ruby动态new对象
查看>>
Linux中grep命令的12个实践例子
查看>>
使用Docker Compose部署基于Sentinel的高可用Redis集群
查看>>