您的位置:首页 > 其它

算法 第四版 2.3.6

2017-09-12 16:03 106 查看
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 stub
StdDraw.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++;
}
}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: