真正有些水準的排序算法 - 快速排序

冒泡和選擇排序的簡單粗暴也許在某些人眼裏都不能稱作算法,現在要進入一種更優雅的排序算法,快速排序。它使用分而治之(Divide and Conquer, D&G) 的策略,要應用到遞歸調用。快速排序敢說自己快速,也確實比選擇排序快很多很多。冒泡和選擇排序,尤其是選擇排序是非常自然的排序算法,而快速排序就不是一般人會隨意想出來的。

快速排序的演繹需要用遞歸來思考循環的問題,然而我之前總是在及力用循環來避免遞歸調用,有趣的是諸如 Haskell 等函數式編譯語言根本沒有循環,只能用遞歸來編寫循環的效果。來看一個簡單的例子,比如要從 1 加到 100,我們很自然會用循環從 1 累加到 100,如果換成遞歸,看下面的代碼

def summary(arr):
    if len(arr) == 0:
        return 0
    else:
        return arr[0] + summary(arr[1:])


print(summary(items = list(range(1, 101))))  # 5050

遞歸有助於我們把大問題分解爲小問題,上面代碼的思維是數組的和總是很一個元素加上剩下元素列表的和,直到最後元素列表爲空(和爲 0)。 閱讀全文 >>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章