概述:产生大规模数据,与原生的排序算法比较,进行检测自己所写的算法是否正确
1,你想要测的方法a
2,实现复杂度不好但是容易实现的方法b
3,实现一个随机样本产生器
4,把方法a和方法b跑相同的随机样本,看看得到的结果是否一样
5,如果有一个随机样本使得比对结果不一致,打印样本进行人工干预,改对方法a和方法b
6,当样本数量很多时比对测试依然正确,可以确定方法a已经正确。
public static void comparator(int[] arr) {
Arrays.sort(arr);
}
// test
//加工出一个长度随机,值也随机的数组
public static int[] generateRandomArray(int maxSize,int maxValue) {
//Math.random() [0,1)
//Math.random() * N [0,N)
//(int)(Math.random()*N) [0,N-1]
int[] arr = new int[(int)(Math.random()*(maxSize+1))];
for(int i = 0 ; i < arr.length; i++) {
//想做到负的到整的都有
arr[i] = (int)((maxValue+1)*Math.random()) - (int)((maxValue+1)*Math.random());
}
return arr;
}
public static int[] copyArray(int[] arr) {
if(arr == null) return null;
int[] res = new int[arr.length];
for(int i = 0;i < arr.length; i++) {
res[i] = arr[i];
}
return res;
}
//比较两个数组是否一样
public static boolean isEqual(int[] arr1,int[] arr2) {
if((arr1 == null) && arr2 != null || (arr1 != null) && arr2 == null) return false;
if(arr1 == null && arr2 == null) return true;
if(arr1.length != arr2.length) return false;
for(int i = 0; i< arr1.length ;i++) {
if(arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
public static void printArray(int[] arr) {
System.out.println(Arrays.toString(arr));
}
public static void main(String[] args) {
int testTime = 500000;
int maxSize = 100;
int maxValue = 100;
boolean succeed = true;
for(int i = 0;i < testTime; i++) {
int[] arr1 = generateRandomArray(maxSize,maxValue);
int[] arr2 = copyArray(arr1);
bubbleSort(arr1);
comparator(arr2);
if(!isEqual(arr1,arr2)) {
succeed = false;
printArray(arr1);
printArray(arr1);
break;
}
}
System.out.println(succeed ? "Nice":"Fucking fucked!");
int[] arr = generateRandomArray(maxSize,maxValue);
printArray(arr);
bubbleSort(arr);
printArray(arr);
}
原文:https://www.cnblogs.com/wpbk/p/14908019.html