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++;
}
}
}
算法 第四版 2.3.6
最新推荐文章于 2021-05-17 17:42:59 发布