python程式設計篇之資料結構與演算法(十一)
阿新 • • 發佈:2018-12-14
歸併排序
歸併排序是採用分治法的一個非常典型的應用。歸併排序的思想就是先遞迴分解陣列,再合併陣列。
將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的最前面的數,誰小就先取誰,取了後相應的指標就往後移一位。然後再比較,直至一個數組為空,最後把另一個數組的剩餘部分複製過來即可。
歸併排序的分析
def merge_sort(alist): if len(alist) <= 1: return alist # 二分分解 num = len(alist)/2 left = merge_sort(alist[:num]) right = merge_sort(alist[num:]) # 合併 return merge(left,right) def merge(left, right): '''合併操作,將兩個有序陣列left[]和right[]合併成一個大的有序陣列''' #left與right的下標指標 l, r = 0, 0 result = [] while l<len(left) and r<len(right): if left[l] < right[r]: result.append(left[l]) l += 1 else: result.append(right[r]) r += 1 result += left[l:] result += right[r:] return result alist = [54,26,93,17,77,31,44,55,20] sorted_alist = mergeSort(alist) print(sorted_alist)
時間複雜度
- 最優時間複雜度:O(nlogn)
- 最壞時間複雜度:O(nlogn)
- 穩定性:穩定