0

我看到一篇文章,他们正在对经典排序算法进行计时,以查看哪个最快以及多少。我想复制那个过程。我认为我所有的排序算法都是正确的,但是我在创建随机数组时遇到了麻烦。

这是我的主要方法,它调用另一个类并向它们发送随机数组。

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而不是任何数字的值。

4

3 回答 3

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];
    }
}
于 2013-11-11T18:05:28.263 回答
1
array[i] = array[random];

这不是你想要的。random可以是任何合法int价值,因此您可能会越界。我相信你会想要

array[i] = random;

反而。

您还在其中分配了一个不必要的数组(new int[...]就在覆盖它之前arraySize),并且您实际上并不需要从中返回值arraySize(尽管使用返回值而不是输出参数会更干净)。

于 2013-11-11T17:51:35.440 回答
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,其值介于lowerhigher

于 2013-11-11T17:49:46.163 回答