Java - 根据程序执行时间在控制台应用程序中产生不同的结果

时间:2013-08-20 13:06:09

标签: java bubble-sort

我使用Java(控制台应用程序)实现了一个简单的冒泡排序算法。这是我的ArrayBub类

public class ArrayBub {
private int[] _numbersArray;

// Constructor of class
public ArrayBub(int[] numbersArray) {
    _numbersArray = numbersArray;
}

public void BubbleSort() {
    long startTime = System.currentTimeMillis();
    System.out.println("Bubble sort - sort " + _numbersArray.length + " numbers in array (random order)");
    System.out.println("Initial array: " + Arrays.toString(_numbersArray));
    int i, j, temp;
    int n = _numbersArray.length;

    for (i = 0; i < n - 1; i++) {
        for (j = 1; j < n - i; j++) {
            if (_numbersArray[j - 1] > _numbersArray[j]) {
                temp = _numbersArray[j - 1];
                _numbersArray[j - 1] = _numbersArray[j];
                _numbersArray[j] = temp;
            }
        }
    }

    System.out.println("Final array: " + Arrays.toString(_numbersArray));
    System.out.println("Number of iterations: " + (i + 1));
    long endTime = System.currentTimeMillis();
    long executionTime = endTime - startTime;
    System.out.println("Execution time (in milliseconds): " + executionTime);
    System.out.println("-----------------------------------------------------------------------------");
}

然后我有一个辅助类,其中创建一个具有随机整数的数组

public class ArrayGenerator {
public int[] GenerateRandomArray(int numberOfDigits) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    int[] array = new int[numberOfDigits];
    long seed = System.nanoTime();
    int i;

    for (i = 1; i <= numberOfDigits; i++) {
        list.add(i);
    }

    Collections.shuffle(list, new Random(seed));

    for (i = 0; i <= list.size() - 1; i++) {
        array[i] = list.get(i).intValue();
    }

    return array;
}

最后我在main方法中调用了我的ArrayBub类:

new ArrayBub(new ArrayGenerator().GenerateRandomArray(10)).BubbleSort();

这是一个奇怪的问题:当我使用一个小数组时 - 假设有10个项目 - 结果看起来像预期的那样

  

冒泡排序 - 按数组排序10个数字(随机顺序)

     

初始数组:[4,5,1,9,10,6,2,8,3,7]

     

最终阵列:[1,2,3,4,5,6,7,8,9,10]

     

迭代次数:10

     

执行时间(以毫秒为单位):1

但是当我为非常大量的整数执行完全相同的代码时(假设说50000),结果非常奇怪。这是控制台显示的内容

  

最终阵列:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ,23,24,25,26 .......]

     

迭代次数:50000

     

执行时间(以毫秒为单位):4995

     

最终阵列:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ,23,24,25,26 .......]

     

初始数组:[39500,13400,48276,11997,25616,.........]

那么为什么会发生这种情况并且结果搞砸了?

0 个答案:

没有答案