1.1 分而治之(divide and conquer)一種遞迴式方法
1.2 找出基線條件,這種條件必須盡可能簡單
1.3 不斷將問題分解為簡單問題,直到問題滿足極基線條件
假設陣列的長度為0~7這8個數字,且亂序排序,並且每次取正中間的值作為基線值 basevalue 。那麼可結合二分查詢的思想可知遞迴呼叫 logn +1 次,即樹深為 logn+1 ,如下圖所示:
由於每次遞迴實際上都對n個元素進行了遍歷判斷,故演算法複雜度為o(n*(logn +1)) = o(nlogn) 。
陣列公升序排序,每次取第乙個元素作為基線值 basevalue ,需要遞迴呼叫n次,每次遞迴實際上都對n個元素進行了遍歷判斷,故演算法複雜度為o(n2) 。
最佳情況即平均情況,如果每次都隨機選取陣列中的乙個元素作為基準值basevalue,那麼快速排序的平均執行時間(演算法複雜度)都為o(nlogn) 。
class solution(object):def quicksort(self, array):
if len(array) < 2:
return array
basevalue = array[0] # 基線條件
left = [i for i in array[1:] if i <= basevalue]
right = [j for j in array[1:] if j > basevalue]
return self.quicksort(left) + [basevalue] + self.quicksort(right) # 遞迴
快速排序演算法解析
一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由前開始向後搜尋 i ...
C 程式設計解析 演算法 排序 快速排序演算法
題目 輸入n個數,對這些數進行從小到大排列。n 10000。程式 測試樣例及程式執行結果noip資訊學奧賽通關 35快速排序 原價269,價59.9 現在隨著全面人工智慧時代的到來,少兒程式設計已是大勢所趨,c 資訊學程式設計是重點學習內容之一。猿博士課堂是智慧型猿少兒程式設計課堂打造的乙個知識性欄...
Scala快速排序演算法解析
一 源 def sort ls list int list int 二 演算法的核心 1 快速排序事先選取乙個元素作為用來比較的基準。比基準大的數放在右邊,比基準小的數放在左邊,一次分成大 小兩類。2 每一類又通過選取乙個基準再次進行大小的分類。直到左右兩邊沒有資料為止。三 遞迴的解釋 理解遞迴的關...