一、介绍

1.

2.

二、代码

1.

 package algorithms.elementary21;

 /******************************************************************************
* Compilation: javac SortCompare.java
* Execution: java SortCompare alg1 alg2 N T
* Dependencies: StdOut.java Stopwatch.java
*
* Sort N random real numbers, T times using the two
* algorithms specified on the command line.
*
* % java SortCompare Insertion Selection 1000 100
* For 1000 random Doubles
* Insertion is 1.7 times faster than Selection
*
* Note: this program is designed to compare two sorting algorithms with
* roughly the same order of growth, e,g., insertion sort vs. selection
* sort or mergesort vs. quicksort. Otherwise, various system effects
* (such as just-in-time compiliation) may have a significant effect.
* One alternative is to execute with "java -Xint", which forces the JVM
* to use interpreted execution mode only.
*
******************************************************************************/ import java.util.Arrays; import algorithms.analysis14.Stopwatch;
import algorithms.util.StdOut;
import algorithms.util.StdRandom; public class SortCompare { public static double time(String alg, Double[] a) {
Stopwatch sw = new Stopwatch();
if (alg.equals("Insertion")) Insertion.sort(a);
else if (alg.equals("InsertionX")) InsertionX.sort(a);
else if (alg.equals("BinaryInsertion")) BinaryInsertion.sort(a);
else if (alg.equals("Selection")) Selection.sort(a);
else if (alg.equals("Bubble")) Bubble.sort(a);
else if (alg.equals("Shell")) Shell.sort(a);
else if (alg.equals("Merge")) Merge.sort(a);
else if (alg.equals("MergeX")) MergeX.sort(a);
else if (alg.equals("MergeBU")) MergeBU.sort(a);
else if (alg.equals("Quick")) Quick.sort(a);
else if (alg.equals("Quick3way")) Quick3way.sort(a);
else if (alg.equals("QuickX")) QuickX.sort(a);
else if (alg.equals("Heap")) Heap.sort(a);
else if (alg.equals("System")) Arrays.sort(a);
else throw new IllegalArgumentException("Invalid algorithm: " + alg);
return sw.elapsedTime();
} // Use alg to sort T random arrays of length N.
public static double timeRandomInput(String alg, int N, int T) {
double total = 0.0;
Double[] a = new Double[N];
// Perform one experiment (generate and sort an array).
for (int t = 0; t < T; t++) {
for (int i = 0; i < N; i++)
a[i] = StdRandom.uniform();
total += time(alg, a);
}
return total;
} // Use alg to sort T random arrays of length N.
public static double timeSortedInput(String alg, int N, int T) {
double total = 0.0;
Double[] a = new Double[N];
// Perform one experiment (generate and sort an array).
for (int t = 0; t < T; t++) {
for (int i = 0; i < N; i++)
a[i] = 1.0 * i;
total += time(alg, a);
}
return total;
} public static void main(String[] args) {
String alg1 = args[0];
String alg2 = args[1];
int N = Integer.parseInt(args[2]);
int T = Integer.parseInt(args[3]);
double time1, time2;
if (args.length == 5 && args[4].equals("sorted")) {
time1 = timeSortedInput(alg1, N, T); // Total for alg1.
time2 = timeSortedInput(alg2, N, T); // Total for alg2.
}
else {
time1 = timeRandomInput(alg1, N, T); // Total for alg1.
time2 = timeRandomInput(alg2, N, T); // Total for alg2.
} StdOut.printf("For %d random Doubles\n %s is", N, alg1);
StdOut.printf(" %.1f times faster than %s\n", time2/time1, alg2);
}
}

2.

 package algorithms.elementary21;

 import algorithms.util.StdDraw;
import algorithms.util.StdRandom; /******************************************************************************
* Compilation: javac InsertionBars.java
* Execution: java InsertionBars N
* Dependencies: StdDraw.java
*
* Insertion sort N random real numbers between 0 and 1, visualizing
* the results by ploting bars with heights proportional to the values.
*
* % java InsertionBars 20
*
******************************************************************************/ public class InsertionBars {
public static void sort(double[] a) {
int N = a.length;
for (int i = 0; i < N; i++) {
int j = i;
while (j >= 1 && less(a[j], a[j-1])) {
exch(a, j, j-1);
j--;
}
show(a, i, j);
}
} private static void show(double[] a, int i, int j) {
StdDraw.setYscale(-a.length + i + 1, i);
StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
for (int k = 0; k < j; k++)
StdDraw.line(k, 0, k, a[k]*.6);
StdDraw.setPenColor(StdDraw.BOOK_RED);
StdDraw.line(j, 0, j, a[j]*.6);
StdDraw.setPenColor(StdDraw.BLACK);
for (int k = j+1; k <= i; k++)
StdDraw.line(k, 0, k, a[k]*.6);
StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
for (int k = i+1; k < a.length; k++)
StdDraw.line(k, 0, k, a[k]*.6);
} private static boolean less(double v, double w) {
return v < w;
} private static void exch(double[] a, int i, int j) {
double t = a[i];
a[i] = a[j];
a[j] = t;
} public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
StdDraw.setCanvasSize(160, 640);
StdDraw.setXscale(-1, N+1);
StdDraw.setPenRadius(.006);
double[] a = new double[N];
for (int i = 0; i < N; i++)
a[i] = StdRandom.uniform();
sort(a);
} }

3.

 package algorithms.elementary21;

 import algorithms.util.StdDraw;
import algorithms.util.StdRandom; /******************************************************************************
* Compilation: javac SelectionBars.java
* Execution: java SelectionBars N
* Dependencies: StdDraw.java
*
* Selection sort N random real numbers between 0 and 1, visualizing
* the results by ploting bars with heights proportional to the values.
*
* % java SelectionBars 20
*
******************************************************************************/ public class SelectionBars { public static void sort(double[] a) {
int N = a.length;
for (int i = 0; i < N; i++) {
int min = i;
for (int j = i+1; j < N; j++)
if (less(a[j], a[min])) min = j;
show(a, i, min);
exch(a, i, min);
}
} private static void show(double[] a, int i, int min) {
StdDraw.setYscale(-a.length + i + 1, i);
StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
for (int k = 0; k < i; k++)
StdDraw.line(k, 0, k, a[k]*.6);
StdDraw.setPenColor(StdDraw.BLACK);
for (int k = i; k < a.length; k++)
StdDraw.line(k, 0, k, a[k]*.6);
StdDraw.setPenColor(StdDraw.BOOK_RED);
StdDraw.line(min, 0, min, a[min]*.6);
} private static boolean less(double v, double w) {
return v < w;
} private static void exch(double[] a, int i, int j) {
double t = a[i];
a[i] = a[j];
a[j] = t;
} public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
StdDraw.setCanvasSize(260, 640);
StdDraw.setXscale(-1, N+1);
StdDraw.setPenRadius(.006);
double[] a = new double[N];
for (int i = 0; i < N; i++)
a[i] = StdRandom.uniform();
sort(a);
} }

4.

算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-003比较算法及算法的可视化的更多相关文章

  1. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-001选择排序法(Selection sort)

    一.介绍 1.算法的时间和空间间复杂度 2.特点 Running time is insensitive to input. The process of finding the smallest i ...

  2. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-007归并排序(自下而上)

    一. 1. 2. 3. 二.代码 package algorithms.mergesort22; import algorithms.util.StdIn; import algorithms.uti ...

  3. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-006归并排序(Mergesort)

    一. 1.特点 (1)merge-sort : to sort an array, divide it into two halves, sort the two halves (recursivel ...

  4. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-005插入排序的改进版

    package algorithms.elementary21; import algorithms.util.StdIn; import algorithms.util.StdOut; /***** ...

  5. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-004希尔排序法(Shell Sort)

    一.介绍 1.希尔排序的思路:希尔排序是插入排序的改进.当输入的数据,顺序是很乱时,插入排序会产生大量的交换元素的操作,比如array[n]的最小的元素在最后,则要经过n-1次交换才能排到第一位,因为 ...

  6. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-002插入排序法(Insertion sort)

    一.介绍 1.时间和空间复杂度 运行过程 2.特点: (1)对于已排序或接近排好的数据,速度很快 (2)对于部分排好序的输入,速度快 二.代码 package algorithms.elementar ...

  7. 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-005计测试算法

    1. package algorithms.analysis14; import algorithms.util.StdOut; import algorithms.util.StdRandom; / ...

  8. 算法Sedgewick第四版-第1章基础-1.4 Analysis of Algorithms-002如何改进算法

    1. package algorithms.analysis14; import algorithms.util.In; import algorithms.util.StdOut; /******* ...

  9. 算法Sedgewick第四版-第1章基础-2.1Elementary Sortss-008排序算法的复杂度(比较次数的上下限)

    一. 1. 2.

随机推荐

  1. 第六次scrum meeting记录

    文章负责:刘斯盾 日期:2017年10月30日 会议地点:新主楼F座二楼 各组员工作情况 团队成员 昨日完成任务 明日要完成任务 赵晓宇 评分界面搭建 issue17 课程列表页面搭建 issue20 ...

  2. 分布式事务_03_2PC框架raincat源码解析-事务提交过程

    一.前言 前面两节,我们已经将raincat的demo工程启动,并简单分析了下事务协调者与事务参与者的启动过程. 这一节,我们来看下raincat的事务提交过程. 二.事务提交过程概览 1.二阶段对应 ...

  3. C# 之二进制序列化

    序列化:又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制.其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方. 一般有三种方式:1.是使用BinaryF ...

  4. LeetCode Continuous Subarray Sum

    原题链接在这里:https://leetcode.com/problems/continuous-subarray-sum/description/ 题目: Given a list of non-n ...

  5. python的编解码问题

    http://blog.chinaunix.net/uid-27838438-id-4227131.html

  6. 设置Qt应用程序图标及应用程序名 【转载】

    一直以来很纠结给qt应用程序添加图标问题,在网上收过一次,但是感觉不够完整,现将自己的实现过程记录下,以便以后查看: 通过网上的例子知道qt助手中有相关说明: Setting the Applicat ...

  7. webrtc 术语

    参考网址 https://webrtcglossary.com/ ORTC stands for Object-RTC.ORTC is an initiative involving Google, ...

  8. java代码继承------多层继承

    总结:继承.方法的重要性, 运行结果显示: class A is callingclass B is callingclass C is calling package com.addd; //jav ...

  9. tree指令

    tree 中文解释:tree功能说明:以树状图列出目录的内容.语 法:tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录.. ...

  10. Annotation之四:注解中的-Xlint:unchecked和 -Xlint:deprecation

    一.-Xlint:unchecked用法 对如下Test.java编译时 package com.dxz.annotation; import java.util.ArrayList; import ...