Algs4-2.1.33分布图
2.1.33分布图。对于你为练习2.1.33给出的测试用例,在一个无穷循环中调用sort()方法将由第三个命令行参数指定大小的数组排序,记录每次排序的用时并使用StdDraw在图上画出所有平均运行时间,应该能够得到一张运行时间的分布图。
1)插入排序1000个元素
2)插入排序10000个元素
3)选择排序1000个元素
4)选择排序10000个元素
5)希尔排序1000个元素
6)希尔排序10000个元素
7)希尔排序100000个元素
public class E2d1d33
{
public static double time (String alg,Double[] a)
{
Stopwatch timer =new Stopwatch();
if(alg.equals("Insertion")) Insertion.sort(a);
if(alg.equals("Selection")) Selection.sort(a);
if(alg.equals("Shell")) Shell.sort(a);
// if(alg.equals("Merge")) Merge.sort(a);
// if(alg.equals("Quick")) Quick.sort(a);
// if(alg.equals("Heap")) Heap.sort(a);
return timer.elapsedTime();
}
public static double timeRandomInput(String alg,int N,int T)
{
double total =0.0;
Double[] a=new Double[N];
for (int t=0;t<T;t++)
{
for (int i=0;i<N;i++)
a[i]=StdRandom.uniform();
total+=time(alg,a);
}
return total;
}//end timeRandomInput
public static void main(String[] args)
{
String alg=args[0];
Integer N=Integer.parseInt(args[1]);
Integer T=0;
double timeTotal=0;
//
StdDraw.setXscale(0.0,1000);
StdDraw.setYscale(0.0,20);
StdDraw.setPenColor(StdDraw.RED);
StdDraw.setPenRadius(0.005);
//
while (true)
{
T++;
timeTotal =timeTotal+timeRandomInput(alg,N,1);
StdDraw.point(T*1.0,timeTotal/T);
}
}
}