排序算法雜談(二) —— 冒泡排序的遞歸實現


眾所周知,循環和遞歸,在很多情況下是可以互相轉換的。

那么,冒泡排序(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);
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM