1. 程式人生 > >分治法 實現歸併排序

分治法 實現歸併排序

分治法 實現歸併排序

1 問題描述

  二路歸併排序,不仔細詳解了。之所以記錄是因為被坑了, 詳細看程式碼

2 python 實現

def merge(row_data, result_data, start, center, end):
    i = start
    j = center + 1
    k = start

    while i <= center and j <= end:
        if result_data[i] <= result_data[j]:
            row_data[k] = result_data[i]
            k 
= k + 1 i = i + 1 else: row_data[k] = result_data[j] k = k + 1 j = j + 1 if i <= center: while i <= center: row_data[k] = result_data[i] k = k + 1 i = i + 1 if j <= end: while
j <= end: row_data[k] = result_data[j] k = k + 1 j = j + 1 print("合併結果") print(row_data) # result 的 值 也要改變; 如果不改變,下次 比較時,會出錯; for x in range(start, end + 1): result_data[x] = row_data[x] # row_data 是排序號的資料; 將排好序的資料 賦值給 result_data; #
row_data: 原始資料, result_data: 結果資料 def merge_sort(row_data, result_data, start, end): if start == end: result_data[start] = row_data[start] else: center = (start + end) // 2 merge_sort(row_data, result_data, start, center) merge_sort(row_data, result_data, center+1, end) merge(row_data, result_data, start, center, end) def test_data(): data = [23, 13, 49, 6, 31, 19, 28] # 陣列是 引用; result = list(range(len(data))) print(result) merge_sort(data, result, 0, len(data)-1) print("執行結果") print("排序結果:") print(result) test_data()