眾所周知,循環和遞歸,在很多情況下是可以互相轉換的。
那么,冒泡排序(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); } } } }