算法 第四章 2.1.32

来源:互联网 发布:搜狗输入法mac怎么设置 编辑:程序博客网 时间:2024/05/23 00:35
package Cap2_1;import Cap1.Stopwatch;import edu.princeton.cs.introcs.StdDraw;import edu.princeton.cs.introcs.StdRandom;public class Insertion extends sortTemplate{public static void sort(Comparable[] a){int N = a.length;for(int i=1;i<N;i++){Comparable temp = a[i];int j;for(j=i-1;j>=0 && less(temp, a[j]); j--){a[j+1] = a[j];}a[j+1] = temp;}}public static void exch(Comparable[] a, int i, int j){Comparable t = a[i];a[i] = a[j];a[j] = t;}public static void drawSort(Comparable[] a, int x1, int x2){StdDraw.setXscale(-1, a.length+1);Comparable max=a[0];for(int i=1;i<a.length;i++) if(less(max, a[i])) max = a[i];StdDraw.setYscale(-2, (Integer)max+1);for(int i=0;i<a.length;i++){int y = (Integer)a[i];if(i==x1||i==x2){StdDraw.setPenColor(StdDraw.RED);StdDraw.filledRectangle(i+0.5, y/2.0, 0.3, y/2.0);StdDraw.setPenColor(StdDraw.BLACK);}else StdDraw.filledRectangle(i+0.5, y/2.0, 0.3, y/2.0);}}public static void main(String[] args) {// TODO Auto-generated method stubStdDraw.setXscale(0, 50);StdDraw.setYscale(-5, 10);double lastT1=0, lastT2=0;for(int i=0;i<50;i++){int N=100+i*100;Integer[] a = new Integer[N];for(int j=0;j<N;j++)a[j]=j;StdRandom.shuffle(a);Integer[] b = a.clone();Stopwatch sw = new Stopwatch();sort(a);double t1 = sw.elapsedTime();sw = new Stopwatch();Selection.sort(a);double t2 = sw.elapsedTime();StdDraw.setPenColor(StdDraw.RED);StdDraw.line(i-1, lastT1*100, i, t1*100);StdDraw.setPenColor(StdDraw.BLUE);StdDraw.line(i-1, lastT2*100, i, t2*100);lastT1 = t1;lastT2 = t2;}}}