对数器简单来说就是在面对同一个问题时,用一种暴力简单但效率不高的算法,来验证另外一种较为复杂的算法的正确性。emmmmm也有可能你写的两套算法都错的。
具体做法就是用一套随机生成器来生成输入,然后分别用两套算法来得到答案,最后将答案进行比对即可。
public static int[] generateRandomArray(int maxSize,int maxValue) {
int[] arr = new int[(int)((maxSize+1)*Math.random())];
for(int i=0;i<arr.length;i++) {
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[] copyArr = new int[arr.length];
for(int i=0;i<arr.length;i++) {
copyArr[i] = arr[i];
}
return copyArr;
}
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 main(String[] args) {
int testTime = 1000;
int maxSize = 20;
int maxValue = 100;
boolean success = true;
for(int i=0;i<testTime;i++) {
int[] arr1 = generateRandomArray(maxSize, maxValue);
int[] arr2 =copyArray(arr1);
selectSort(arr1);
insertSort(arr2);
if(!isEqual(arr1, arr2)) {
success = false;
break;
}
}
System.out.println(success?"nice":"No");
}