眾所周知,循環和遞歸,在很多情況下是可以互相轉換的。
那么,冒泡排序(Bubble Sort),作為典型的雙重循環結構,也可以將其轉化成遞歸形式。
但是,將遞歸轉化為循環,對於程序的運行是有益的,因為它避免了不可預知的“方法壓棧”的現象出現。
而將循環化為遞歸,多數情況下,不推薦這么做,即使遞歸的代碼可能實現地非常漂亮。漂亮與高效往往是沖突的。
所以,以下的冒泡排序僅作參考,讀者可以用它來拓寬思維。但是,永遠不要這樣寫冒泡排序!
public final class BubbleSortRecursion implements Sort {
@Override
public void sort(int[] array) {
recursion(array, 0, array.length - 2);
}
private void recursion(int[] array, int left, int right) {
if (right > 0) {
if (array[left] > array[left + 1]) {
ArrayHelper.swap(array, left, left + 1);
}
if (left >= right) {
recursion(array, 0, right - 1);
} else {
recursion(array, left + 1, right);
}
}
}
}
