【資料結構】歸併排序-python實現
阿新 • • 發佈:2018-12-14
【資料結構】歸併排序--python 實現
歸併排序介紹
快速排序是典型的使用分治的思想來解決問題的演算法。分治策略會將原問題劃分為n個規模較小而結構與原問題相似的子問題。遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。 --《演算法導論》
時間複雜度
歸併排序演算法計算的耗時不依賴於資料的特點(相比於快速排序可知)。歸併排序的最好及最壞情況均為o(lgn)。
程式碼實現
與快速排序的邊調整邊劃分不同:歸併排序會先進行劃分,直至劃分到最小的單元,然後進行合併操作。
def Merge(arr, left, right, mid, func_comp = lambda x, y: x < y): ''' time complexy is 2*o(n) ''' tmp_arr = [] i = left j = mid + 1 while i <= mid and j <= right: if func_comp(arr[i], arr[j]): tmp_arr.append(arr[i]) i += 1 else: tmp_arr.append(arr[j]) j += 1 while i <= mid: tmp_arr.append(arr[i]) i += 1 while j <= right: tmp_arr.append(arr[j]) j += 1 for x in range(left, right+1): arr[x] = tmp_arr[x - left] def MergeSort(arr, left, right): ''' time complexy is o(lgn) ''' if right == left: return mid = left + int((right - left)/2) MergeSort(arr, left, mid) MergeSort(arr, mid+1, right) print(arr[left:mid+1], arr[mid+1:right+1]) Merge(arr, left, right, mid) return
執行示例
arr = [1, 4, 2, 7, 3, 9, 10, 12]
MergeSort(arr, 0, len(arr)-1)
print(arr)