遞歸練習--快速排序

一、快速排序簡述

劃分

快速排序的核心就是劃分,假設一個列表 list=[2, 3, 2, 1, 4, 1],我們以列表第一個數即 list[0] 爲基準值進行劃分,小於等於基準值的數組成一個列表 low,大於基準值的數組成一個列表 high。則如下所示

low = [2, 1, 1]
high = [3, 4]

遞歸

使用遞歸解決問題,意思是把問題分解成規模縮小的同類問題的子問題,然後遞歸調用方法來表示問題的解。使用遞歸時需要注意如下:

  • 遞歸基,表示該問題最簡單情況的直接解;如這題,最簡單的情況爲 list 爲空或只有一個元素,這種情況都視爲有序的。
  • 遞歸步,表示一般情況下如何求解問題;如這題,一般情況就是子問題,可假設一個 list=[1,4,1] ,基準值是1,劃分爲 low=[1]high=[4],然後需要返回一個有序的列表 low + 基準值 + high
  • 遞歸調用,即調用自身函數或方法;假設一個 list=[1,4,2,1,0] ,基準值是1,劃分爲 low=[1,0]
    high=[4,2]lowhigh都是無序的,所以還需要調用自身函數分別對lowhigh劃分。

二、代碼結構

劃分函數

劃分函數 partition(List) ,返回一個元組即 (low,high),

快速排序函數

快速排序函數 qsort(List)

僞代碼,僅提供思路
qsort(List):
	if len(List) is 0 or 1		//遞歸基
		return List
	else:						//遞歸步
		base = List[0]
		tuple = partition(List)
		low = qsort(tuple[0])	//遞歸調用
		high = qsort(tuple[1])	//遞歸調用
		return low + base + high
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章