对数器的概念及使用
1.有一个你要测的方法a;
2.实现一个绝对正确即使复杂度不好的方法b;
3.实现一个随机样本产生器;
4.实现比对的方法;
5.把方法a和方法b比对很多次来验证方法a是否正确
6.如果有一个样本使得比对出错,打印样本分析是哪个方法出错
7.当样本数量很多时比对测试依然正确,可以确定方法a已经正确
用冒泡排序作为例子:
package basic_class_01;
import java.util.Arrays;
import java.util.Random;
public class bubbleSortWithComparator {
// 冒泡排序部分
public static void bubbleSort(int[] arr){
if(arr==null||arr.length<2){
return;
}
for(int i=arr.length-1;i>0;i--){
for(int j=0;j<i;j++){
if(arr[j]>arr[j+1]){
swap(arr,j,j+1);
}
}
}
}
public static void swap(int arr[],int i,int j){
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
// 产生随机数组
public static int[] generateRandomArray(int maxSize,int maxValue){
// 产生的数组长度为【0-size】
int[] arr=new int[(int)((maxSize+1)* Math.random())];
for(int i=0;i<arr.length;i++){
// 产生的数组中的数的范围是【-value-value】
arr[i]=(int)((maxValue+1)*Math.random())-(int)(maxValue*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 void comparator(int[] arr){
Arrays.sort(arr);
}
// 判断两个数组是否相等
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) {
if (arr == null) {
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
// text time是判断次数
int textTime=50000;
int maxSize=100;
int maxValue=100;
boolean succeed=true;
for(int i=0;i<textTime;i++){
int[] arr1=generateRandomArray(maxSize,maxValue);
int[] arr2=copyArray(arr1);
bubbleSort(arr1);
comparator(arr2);
if(!isEqual(arr1,arr2)){
succeed=false;
break;
}
}
// 如果succeed是true那么就会输出nice
System.out.println(succeed ? "Nice!" : "Fucking fucked!");
int[] arr = generateRandomArray(maxSize, maxValue);
printArray(arr);
bubbleSort(arr);
printArray(arr);
}
}
输出实例: