从之前的文章当中,已经讲解了不少算法,其中这十个算法我们从算法思路,到算法伪代码实现,到复杂度分析,在进行学习后,已经拥有了搭建测试平台的基础,其中这个平台可以完你自身硬对算法从1000,到千万级测试,其中算法测试时间与你的机器硬件水平和实现的算法有关系,下面是怎么实现这个平台和自定义测试数组生产类的具体讲解,有了这些基础后添加后续的功能也十分的方便。
下面是平台的具体实现:
package runoob;
import java.util.Scanner;
public class main {
public static class textSort{
InsertionSort text=new InsertionSort();//插入排序
SelectionSort text2=new SelectionSort();//选择排序
ShellSort text3=new ShellSort();//希尔排序
MergeSort text4=new MergeSort();//归并排序
MergeSort text5=new MergeSort();//归并与插入比较(可以上列合并)
Quick_sort text6=new Quick_sort();//快排+随机化快排
Power_reckon text7=new Power_reckon();//n的幂指数
Fibonacci text8=new Fibonacci();//斐波那契额数列的三种实现
CountSort text9=new CountSort();//计数排序
RandomSelect text10=new RandomSelect();//随机化查找第k大
long num;
int enter;
public void enternum1(Scanner sc){
enter=sc.nextInt();
}
public void enternum2(Scanner sc) {
num=sc.nextInt();
}
public void CreatSort(){
if (enter==1)
text.InsertionSort_text(num);
else if(enter==2)
text2.SelectionSort_text(num);
else if(enter==3)
text3.ShellSort_text(num);
else if (enter==4)
text4.MergeSort_text(num);
else if (enter==5)
text5.MergeSort_Incompear(num);
else if (enter==6)
text6.Quicksort_text(num);
else if (enter==7)
text7.reckon_text(num);
else if(enter==8)
text8.Fibonacci_text(num);
else if(enter==9)
text9.CountSort_text(num);
else if(enter==10)
text10.RoandomSelect_text(num);
}
}
public static void main(String[] args) {
textSort text=new textSort();
System.out.println("选择你需要算法"+"\n"+"1.插入排序"+"\n"+"2.选择排序"+"\n"+"3.希尔排序"+"\n"+"4.归并排序"+"\n"+"5.归并排序与插入比较"+"\n"+"6.快速排序与随机快速排序"+"\n"+"7.计算X的n次幂的两种方法"+"\n"+"8.斐波那契额数列的三种实现方法"+"\n"+"9.桶排序与快速排序的比较(常规快排)"+"\n"+"10.快速化排序与随机化查找第k个数");
text.enternum1(new Scanner(System.in));
System.out.println("请输入参与算法的数量");
text.enternum2(new Scanner(System.in));
text.CreatSort();
}
}
上述的算法具体实现参考往期文章:
下列是实现的自定义测试数据的生成类,主要用于测试排序端口的数据生成和数据的打印:
SortHelper类中的方法generateRandomArray的参数分别为,(num,left,right),其中第一个参数参与算法生成的数量级,由用户自行输入,参与算法的随机生成序列,它可以为千万级别,因为在其内部中属long级别,left和right则为生成序列的大小范围,生成的序列为返回值类型为Integer[]。
SortHelper类中的方法printArray为无参方法,主要是方便打印操作。
package runoob;
import java.util.Scanner;
public class SortHelper {
// SortTestHelper不允许产生任何实例
private SortHelper(){}
// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR]
public static Integer[] generateRandomArray(long n, int rangeL, int rangeR) {
assert rangeL <= rangeR;
Integer[] arr = new Integer[Math.toIntExact(n)];
for (int i = 0; i < n; i++)
arr[i] = new Integer((int)(Math.random() * (rangeR - rangeL + 1) + rangeL));
System.out.println("下面为随机生成数列");
printArray(arr);
return arr;
}
// 打印arr数组的所有内容
public static void printArray(Object arr[]) {
for (int i = 0; i < arr.length; i++){
System.out.print( arr[i] );
System.out.print( ' ' );
}
System.out.println();
return;
}
}
下列是运行结果:
可以直接选择测试的参与数据量的大小,然后根据算法内部的数据范围调整,生成对应的数据放入算法当中进行运行,其中包含测试时间和排序结果。
下面是资源下载的地方,不想自己搭建的同学可以直接下载
基于Java的千万级测试平台资源下载