我已经使用 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, ....]
那么为什么会发生这种情况并且结果会变得混乱呢?