python算法与数据结构-归并排序算法
生活随笔
收集整理的這篇文章主要介紹了
python算法与数据结构-归并排序算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼如下所示:
# -*-coding=utf-8-*- def merge_sort(alist):"""歸并排序"""n = len(alist)if n<=1:return alistmid = n//2#print('mid結果是',mid) #mid結果是 4 mid結果是 2 mid結果是 1 mid結果是 1 mid結果是 2 mid結果是 1等等# print('mid前結果', alist[:mid],'mid后結果', alist[mid:])"""mid前結果 [54, 26, 93, 17] mid后結果 [77, 31, 44, 55, 20]mid前結果 [54, 26] mid后結果 [93, 17]mid前結果 [54] mid后結果 [26]mid前結果 [93] mid后結果 [17]mid前結果 [77, 31] mid后結果 [44, 55, 20]mid前結果 [77] mid后結果 [31]mid前結果 [44] mid后結果 [55, 20]mid前結果 [55] mid后結果 [20]"""#left 采用歸并排序后形成的有序的新的列表left_li = merge_sort(alist[:mid]) #這個函數是遞歸分解后的數組#right 采用歸并排序后形成的有序的新的列表right_li = merge_sort(alist[mid:]) #這個函數是遞歸分解后的數組#print('左側開始結果', left_li, '右側開始結果', right_li)"""左側開始結果 [54] 右側開始結果 [26]左側開始結果 [93] 右側開始結果 [17]左側開始結果 [26, 54] 右側開始結果 [17, 93]左側開始結果 [77] 右側開始結果 [31]左側開始結果 [55] 右側開始結果 [20]左側開始結果 [44] 右側開始結果 [20, 55]左側開始結果 [31, 77] 右側開始結果 [20, 44, 55]左側開始結果 [17, 26, 54, 93] 右側開始結果 [20, 31, 44, 55, 77]"""#return 999#將兩個有序的子序列合并為一個新的整體#merge(left,right)left_pointer,right_pointer = 0,0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] <= right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1# print('第一次循環result結果',result)# return result#print('左側result結果',left_li,'右側result結果',right_li)""" 左側result結果 [54] 右側result結果 [26] 左側result結果 [93] 右側result結果 [17] 左側result結果 [26, 54] 右側result結果 [17, 93] 左側result結果 [77] 右側result結果 [31] 左側result結果 [55] 右側result結果 [20] 左側result結果 [44] 右側result結果 [20, 55] 左側result結果 [31, 77] 右側result結果 [20, 44, 55] 左側result結果 [17, 26, 54, 93] 右側result結果 [20, 31, 44, 55, 77]"""#print('左側游標結果',left_pointer,'左側結果值',left_li[left_pointer:],'右側游標結果',right_pointer,'右側結果值',right_li[right_pointer:])"""左側游標結果 0 左側結果值 [54] 右側游標結果 1 右側結果值 []左側游標結果 0 左側結果值 [93] 右側游標結果 1 右側結果值 []左側游標結果 2 左側結果值 [] 右側游標結果 1 右側結果值 [93]左側游標結果 0 左側結果值 [77] 右側游標結果 1 右側結果值 []左側游標結果 0 左側結果值 [55] 右側游標結果 1 右側結果值 []左側游標結果 1 左側結果值 [] 右側游標結果 1 右側結果值 [55]左側游標結果 1 左側結果值 [77] 右側游標結果 3 右側結果值 []左側游標結果 3 左側結果值 [93] 右側游標結果 5 右側結果值 []"""result += left_li[left_pointer:]result += right_li[right_pointer:]return resultif __name__ == "__main__":li = [54, 26, 93, 17, 77, 31, 44, 55, 20]print(li)sorted_li = merge_sort(li)print(sorted_li)?
總結
以上是生活随笔為你收集整理的python算法与数据结构-归并排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 余额宝体验金收益计算
- 下一篇: python算法与数据结构-二分查找算法