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