【发布时间】:2013-10-09 01:20:11
【问题描述】:
我编写了 2 个冒泡排序算法。一种是没有递归的,另一种是有递归的。我很想知道这两者中哪一个更有效,并解释为什么。
递归冒泡排序:
private static int list[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
public int[] recursiveBubble(int[] args, int startIndex, int endIndex) {
if(startIndex > endIndex){
System.out.println("Recursive bubblesort:");
System.out.println(Arrays.toString(args));
return args;
}
if (startIndex == endIndex - 1) {
recursiveBubble(args, 0, endIndex - 1);
} else if (args[startIndex] > args[startIndex+1]) {
int currentNumber = args[startIndex];
args[startIndex] = args[startIndex + 1];
args[startIndex + 1] = currentNumber;
recursiveBubble(args, startIndex + 1, endIndex);
} else {
recursiveBubble(args, startIndex + 1, endIndex);
}
return args;
}
使用循环的冒泡排序:
public int[] bubblesort(int[] args) {
System.out.println("Normal BubbleSort:");
for (int j = 0; j < args.length; j++) {
for (int i = 0; i < args.length; i++) {
int currentNumber = args[i];
if (i + 1 < args.length) {
if (currentNumber > args[i + 1]) {
args[i] = args[i + 1];
args[i + 1] = currentNumber;
}
}
}
}
System.out.println(Arrays.toString(args));
return args;
}
【问题讨论】:
-
这不是此类问题的论坛 - 请尝试Code Review。
-
@SimonArsenault 值得注意的是 javac 不做尾递归优化,而且上述方法在任何情况下都不是尾递归。
-
@Boris 我发布的链接有很多适合 Java 的答案。
-
有什么理由不能只对它们进行基准测试吗?
标签: java algorithm sorting recursion bubble-sort