需求说明
在有一些非OJ(带online judge功能)算法练习平台中,往往需要自己创建对数器,去验证自己写的排序算法是否正确?
我们可以自己去运用jdk提供给我们的工具类中的排序算法,这个算法是绝对正确的,那么我们可以使用random函数创建一个随机长度的随机数组arr1,并且复制到另一个数组arr2中,这样再分别使用系统提供的排序方法和自己写的排序算法给arr1和arr2排序,最后再使用compare方法,比较排序后的两个数组的所有元素值是否相同,如果其中有一个不同,则说明我们自己写的算法是有问题的
代码
package basic;
import java.util.Arrays;
public class Tester_oj {
public static void main(String []args) {
int count = 500;
int maxSize = 100, maxValue = 100;
boolean success = true;
for (int i = 0; i < count; i++)
{
int arr1[] = generateRandomArray(maxSize, maxValue);
int arr2[] = copyArray(arr1);
Insertion_sort.insertion_sort3(arr1);
comparator(arr2);
if(!isEquals(arr1, arr2))
{
success =false;
break;
}
}
System.out.println(success);
}
public static boolean isEquals(int arr1[], int arr2[])
{
for (int i = 0; i < arr2.length; i++)
{
if (arr1[i] != arr2[i]) return false;
}
return true;
}
public static void comparator(int arr[])
{
Arrays.sort(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 int[] generateRandomArray(int maxSize, int maxValue)
{
// maxSize表示长度,maxSize >= 0, 但是等于0时,会报错
int arr[] = new int[(int)((maxSize + 1) * Math.random())];
for (int j = 0; j < arr.length; j++)
{
// 下面这行代码能产生负数,这样能增加生成数据元素的随机性
arr[j] = (int)((maxValue + 1) * Math.random()) - (int)((maxValue + 1) * Math.random()) ;
}
return arr;
}
}