算法 第四版 2.3.6

来源:互联网 发布:易观大数据cto 编辑:程序博客网 时间:2024/06/06 12:55
package Cap2_3;import edu.princeton.cs.introcs.StdDraw;import edu.princeton.cs.introcs.StdOut;import edu.princeton.cs.introcs.StdRandom;import Cap2_1.SortCompare;import Cap2_1.SortTemplate;public class Quick3way extends SortTemplate{private static int cnt=0;public static void sort(Comparable[] a){StdRandom.shuffle(a);sort(a, 0, a.length-1);}public static void sort(Comparable[] a, int lo, int hi){if(hi <= lo) return;int lt = lo, i = lo + 1, gt = hi;Comparable v = a[lo];while(i <= gt){cnt++; // 比较int cmp = a[i].compareTo(v);if      (cmp<0) exch(a, i++, lt++);else if (cmp>0) exch(a, i, gt--);else            i++;}sort(a, lo, lt-1);sort(a, gt+1, hi); //重复部分不用管了;}public static void main(String[] args) {// TODO Auto-generated method stubStdDraw.setXscale(0, 3);StdDraw.setYscale(-1, 200000);int cnt=0;for(int N=100;N<=10000;N*=10){Quick3way.cnt=0;sort(SortCompare.randomInput(N));double t = Quick3way.cnt;double st = N*2*Math.log(N);StdOut.println(t+ " " + st);StdDraw.setPenColor(StdDraw.RED);StdDraw.filledRectangle(0.5+cnt, st/2, 0.3, st/2);StdDraw.setPenColor(StdDraw.BLUE);StdDraw.filledRectangle(0.5+cnt, t/2, 0.3, t/2);cnt++;}}}

原创粉丝点击