通过实现一个排序平台,产生随机数,公平的比较各种排序用时。 顺带回忆一下主要的内排序算法。
实现一个类,产生随机数、统计排序时间
[java]
package lee.sort;
import java.util.Random;
public class SortPlatform {
int size;
int arr[];
Sort sort;
Random random;
public SortPlatform(int length){
random = new Random();
size = length;
arr = new int[size];
for(int i=0;i
arr[i] = (int) (Math.abs(random.nextInt()%(size*5)));
}
}
void printArr(int[] arr){
for(int i=0;i
System.out.print("_"+arr[i]);
}
System.out.println();
}
int[] getArrCopy(){
int[] arrCopy = new int[arr.length];
for(int i=0;i
import lee.sort.HeapSort;
arrCopy[i] = arr[i];
}
return arrCopy;
}
public int[] doSort(Sort sort){
System.out.println("=================Start-"+sort.name+"========================================");
printArr(arr);
System.out.println("----------------------------------------");
int[] sortArr = getArrCopy();
long time = System.currentTimeMillis();
sort.doSort(sortArr);
long cost = System.currentTimeMillis()-time;
printArr(sortArr);
System.out.println("## time cost is "+ cost);
System.out.println("=================END-"+sort.name+"==========================================\n\n");
return sortArr;
}
}
调用方法:
[java]
import java.io.FileNotFoundException;
import lee.graph.Graph;
import lee.graph.GraphAlgorithms;
import lee.graph.LinkedGraph;
import lee.graph.MatrixGraph;
import lee.sort.BubbleSort;
import lee.sort.InsertSort;
import lee.sort.MergeSort;
import lee.sort.QuickSort;
import lee.sort.SelectSort;
import lee.sort.ShellSort;
import lee.sort.SortPlatform;
public class Test {
public static void main(String[] args) throws FileNotFoundException{
SortPlatform sf = new SortPlatform(50);
sf.doSort(new BubbleSort());
sf.doSort(new InsertSort());
sf.doSort(new SelectSort());
sf.doSort(new HeapSort());
sf.doSort(new QuickSort());
sf.doSort(new ShellSort());
}
}
所有的排序算法类集成同一个父类sort
[java]
package lee.sort;
public abstract class Sort {
String name;
Sort(String name){
this.name = name;
}
public abstract void doSort(int[] arr);
}
子类为具体的排序算法, 通过构造函数自报家门, 重写doSort方法,在里面实现具体排序算法。
冒泡排序实现如下:
[java]
package lee.sort;
public class BubbleSort extends Sort{
public BubbleSort() {
super("BubbleSort");
}
@Override
public void doSort(int[] arr) {
int n = arr.length;