定义
生成随机数样本并进行比对的机器。例如,我自己写了个选择排序,但我并不知道对不对,这个时候就可以通过对数器来验证。
代码示例
public class CodeLogarithmizer {
/**
* 选择排序:从小到大排序
* @param arr
*/
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
// 数组为空或者长度小于2,则不用排序
return;
}
int n = arr.length;
for (int i = 0; i < n; i++) {
int currentMinIndex = i;
for (int j = i + 1; j < n; j++) {
currentMinIndex = arr[j] < arr[currentMinIndex] ? j : currentMinIndex;
}
int temp = arr[i];
arr[i] = arr[currentMinIndex];
arr[currentMinIndex] = temp;
}
}
public static void printArr(int[] arr) {
for (int j : arr) {
System.out.print(j + " ");
}
System.out.println();
}
/**
* 生成一个长度在[0,maxLen]之间并且值在[0,maxValue]之间数组
* @param maxLen 数组的最大长度
* @param maxValue 数组的最大值
* @return 随机数组
*/
public static int[] lenRandomValueRandom(int maxLen, int maxValue) {
// 使得len的值在0~maxLen之间
int len = (int)(Math.random() * (maxLen + 1));
int[] arr = new int[len];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int)(Math.random() * (maxValue + 1));
}
return arr;
}
public static boolean isSorted(int[] arr) {
if (arr.length < 2) {
return true;
}
int maxValue = arr[0];
for (int i = 1; i < arr.length; i++) {
if (maxValue > arr[i]) {
return false;
}
maxValue = Math.max(maxValue, arr[i]);
}
return true;
}
public static void main(String[] args) {
// 循环指定次数
int times = 1000;
// 随机数组的最大长度
int maxLen = 50;
// 随机数组的最大值
int maxValue = 2000;
for (int i = 0; i < times; i++) {
int[] arr = lenRandomValueRandom(maxLen, maxValue);
selectSort(arr);
if (!isSorted(arr)) {
printArr(arr);
System.out.println("排序错误");
System.out.println("=========================");
}
}
}
}