我看到一篇文章,他们对经典的排序算法进行计时,以确定哪一个最快,多少。我想复制那个过程。我认为我的所有排序算法都是正确的,但是我在创建随机数组时遇到了麻烦。
这是我的主要方法,它调用另一个类并向它们发送随机数组。
public class Timer {
public static void main(String[] args) {
int[] numArray;
InsertionSort insert = new InsertionSort();
MergeSort merge = new MergeSort();
QuickSort quick = new QuickSort();
SelectionSort select = new SelectionSort();
BubbleSort bubble = new BubbleSort();
int sizeNumber = 0;
Scanner scanner;
scanner = new Scanner(System.in);
System.out.println("Enter size of arrayList to be sorted: ");
sizeNumber = scanner.nextInt();
scanner.close();
numArray = new int[sizeNumber];
arraySize(sizeNumber, numArray);
insert.sort(numArray);
merge.sort(numArray);
quick.sort(numArray);
select.sort(numArray);
bubble.sort(numArray);
}
public static int[] arraySize(int number, int[] array) {
Random rng = new Random();
array = new int[number];
for (int i = 0; i < array.length; i++) {
int random = rng.nextInt();
array[i] = random;
}
return array;
}
}
为了清楚起见,我问如何创建一个int []数组,并用用户选择的长度填充随机数。目前,我使用的方法返回的值类似于[I@9931f5
,而不是任何数字。
答案 0 :(得分:1)
array[i] = array[random];
这不是你想要的。 random
可以是任何合法int
值,因此您可能会超出范围。我相信你想要
array[i] = random;
代替。
你还在那里分配了一个不必要的数组(new int[...]
,然后在arraySize
中覆盖它),你真的不需要从arraySize
返回一个值(虽然使用返回值而不是输出参数会更干净。
答案 1 :(得分:1)
如果限制从Random.nextInt生成的数字会更好,这样数字就不会太大而且太多样化。
因此,通过小修复,您的arraySize函数可以正常工作:
public static void arraySize(int[] array) {
Random rng = new Random();
for(int i=0;i<array.length;i++){
array[i]=rng.nextInt(100);
/*here I fix the size to 0 - 100, you can create a way
to adjust this with respect to the array size as well,
so that the numbers could distribute more evenly */
}
}
由于您将数组传递给函数,因此无需返回它。
其次,num数组作为对每个排序的引用传递:
insert.sort(numArray);
merge.sort(numArray);
quick.sort(numArray);
select.sort(numArray);
bubble.sort(numArray);
numArray将按第一个insert.sort排序,因此第二个和后面的排序将只是获得一个已排序的numArray,它不能成功测试排序复杂性。你必须手动获取numArray的多个副本作为每个排序的参数,一个简单的函数可以做到这一点:
public static void copyArray(int[] copy,int[] array){
for(int i=0;i<array.length;i++){
copy[i]=array[i];
}
}
答案 2 :(得分:0)
int[] randomArray(int size, int lower, int higher)
{
int[] arr = new int[size];
Random r = new Random();
for(int i = 0 ; i < size ; i++)
{
arr[i] = r.nextInt(higher-lower) + lower;
}
return arr;
}
这将生成一个大小为size
的数组,其值介于lower
和higher
之间