我已經編碼了2個bubblesort算法。一個是沒有遞歸,另一個是遞歸。我有興趣瞭解這兩種方法哪一種效率更高,並解釋原因。遞歸BubbleSort vs正常BubbleSort
遞歸冒泡:
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;
}
可能的重複:http://stackoverflow.com/questions/72209/recursion-or-iteration –
這不是論壇這樣的問題 - 嘗試[代碼評論](http://codereview.stackexchange.com /)。 –
@SimonArsenault值得注意的是,javac不會執行尾遞歸優化,並且上述方法在任何情況下都不是尾遞歸。 –