Java 形成和排序正整数数组的最快策略
在Java中,什么更快:创建、填充并排序一个int数组,如下所示Java 形成和排序正整数数组的最快策略,java,arrays,algorithm,sorting,insertion-sort,Java,Arrays,Algorithm,Sorting,Insertion Sort,在Java中,什么更快:创建、填充并排序一个int数组,如下所示 int[] a = int[1000]; for (int i = 0; i < a.length; i++) { // not sure about the syntax a[i] = Maths.rand(1, 500) // generate some random positive number less than 500 } a.sort(); // (which algorithm is best
int[] a = int[1000];
for (int i = 0; i < a.length; i++) {
// not sure about the syntax
a[i] = Maths.rand(1, 500) // generate some random positive number less than 500
}
a.sort(); // (which algorithm is best?)
int[]a=int[1000];
for(int i=0;i
或动态插入排序
int[] a = int[1000];
for (int i = 0; i < a.length; i++) {
// not sure about the syntax
int v = Maths.rand(1, 500) // generate some random positive number less than 500
int p = findPosition(a, v); // where to insert
if (a[p] == 0) a[p] = v;
else {
shift a by 1 to the right
a[p] = v;
}
}
int[]a=int[1000];
for(int i=0;i
有很多方法可以做到这一点:
希望这有帮助 为什么不做一些计时并让我们知道呢?提示:分析复杂性。你至少试过了吗?如果你正在创建一个具有特定分布的数组(比如说只有正的和小的范围),你可以使用计数、桶排序。否则,您仍然需要比较剩下的答案。谢谢您提供了这个有趣的答案。第三个选项很适合学习,但看起来可能会有开销:)只是好奇,O(n log n)中的
log
与O(n lg U)中的lg
不同吗?@BrianJ-不,不是。大O表示法中的对数不需要指定基数,因为它们都是彼此的常数倍数。我在第二种情况下使用了lg(二进制对数),以便更清楚地说明lg是从U中的位数推导出来的,但为了清楚起见,我可能应该更一致。@templatetypedef这是真的吗?这就像说O(n^e)中的指数不需要指定一样。比起O(log2(n))算法,我更喜欢O(log10(n))算法。是吗?@MikeB在大O表示法中说对数的基不重要与说指数的基不重要或指数本身不重要是有区别的。在后两种情况下,如果绝对重要。它适用于对数的原因是,对于任何基数b和c,log_b a=log_c a/log_c b,因此所有对数都只是彼此之间的常数因子,而大O表示法忽略常数。出于这个原因,我不知道O(log_10n)或O(log_2n)算法是否会更好,原因与。。。