【发布时间】:2019-03-12 17:41:59
【问题描述】:
因此,我已将插入排序代码正确地编写到它将成功创建 1,000 到 9,999 之间的 10、1,000、100,000 和 1,000,000 个整数的数组,并很好地完成了插入排序算法。但是,当我尝试 10,000,000 个整数的最后一步时,创建了数组,但代码从未完全完成。我已经允许它有足够的时间来完成,超过 4 或 5 个小时,但无济于事。有人对这里可能出现的问题有任何想法吗?执行者是否有理解这么多整数的问题,或者问题可能源于什么?我已经包含了我编写的插入算法的副本。
public static void insertion(int[] a) {
int n = a.length;
for(int i = 1; i < n; i++) {
int j = i -1;
int temp = a[i];
while(j > 0 && temp < a[j]) {
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
}
}
【问题讨论】:
-
用
j >= 0替换j > 0 -
我猜5个小时还不够
-
这可能只是因为100万和1000万之间的显着差异。您可以多快地简单地遍历 100 万个元素与 1000 万个元素的数组(无 while 循环)?
-
不要忘记你最坏的情况是
O(n^2),这意味着在这种情况下10^14。你能想象这个数字吗? -
每次将数组扩大 10 倍时,您必须允许 100 倍的时间。我的猜测是你没有等待足够长的时间。
标签: java arrays sorting insertion