python实现归并排序算法

待我称王封你为后i 2022-05-09 00:28 347阅读 0赞

前面我们讲了归并排序算法,接下来我们来python代码实现呗,如下

  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. #归并排序
  4. def _last_merge_sort(list1, list2):
  5. i, j = (0, 0)
  6. temp = []
  7. while i < len(list1) and j <len(list2):
  8. if list1[i] <= list2[j]:
  9. temp.append(list1[i])
  10. i += 1
  11. else:
  12. temp.append(list2[j])
  13. j += 1
  14. if i == len(list1):#说明list1遍历完了,只剩下list2后面一点(有可能剩一个,有可能剩很多),因为是排序好的,所以追加即可
  15. for k in list2[j:]:
  16. temp.append(k)
  17. else:
  18. for k in list1[i:]:
  19. temp.append(k)
  20. print "===================="+str(temp)
  21. return temp
  22. def _merge_sort(the_list):
  23. print the_list
  24. if len(the_list) == 1:
  25. return the_list
  26. else:
  27. mid = len(the_list)/2
  28. left = _merge_sort(the_list[:mid])
  29. right = _merge_sort(the_list[mid:])
  30. return _last_merge_sort(left, right)
  31. if __name__ == '__main__':
  32. the_list = [8, 4, 5, 7, 1, 3, 6, 2,8]
  33. print _merge_sort(the_list)

运行,结果如下

  1. [8, 4, 5, 7, 1, 3, 6, 2, 8]
  2. [8, 4, 5, 7]
  3. [8, 4]
  4. [8]
  5. [4]
  6. ====================[4, 8]
  7. [5, 7]
  8. [5]
  9. [7]
  10. ====================[5, 7]
  11. ====================[4, 5, 7, 8]
  12. [1, 3, 6, 2, 8]
  13. [1, 3]
  14. [1]
  15. [3]
  16. ====================[1, 3]
  17. [6, 2, 8]
  18. [6]
  19. [2, 8]
  20. [2]
  21. [8]
  22. ====================[2, 8]
  23. ====================[2, 6, 8]
  24. ====================[1, 2, 3, 6, 8]
  25. ====================[1, 2, 3, 4, 5, 6, 7, 8, 8]
  26. [1, 2, 3, 4, 5, 6, 7, 8, 8]

符合预期

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python实现归并排序

    归并排序 “归并"是将两个或者两个以上的有序表组成一个新的有序表。假定待排序表含有n个记录,则可以看成是n个有序的子表,每个子表长度为一,然后两两归并,得到n//2个长度为

    相关 归并排序算法(Java实现

    1、基本思想 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列