python实现归并排序算法

    归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。

1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归

可以同时进行。

  当初为什么这个算法被发明,是为了解决什么实际问题,我尽量去搜索,可是,一直没找到答案。不过,可以肯定的是,

在这个计算机刚横空出世的年代,为了解决一些问题,发明这种算法就不足为奇了。

  该算法的操作步骤:

  1. 将序列每相邻两个数字进行归并操作,形成ceil(n/2)个序列,排序后每个序列包含两/一个元素
  2. 若此时序列数不是1个则将上述序列再次归并,形成ceil(n/4)个序列,每个序列包含四/三个元素
  3. 重复步骤2,直到所有元素排序完毕,即序列数为1

  python的代码实现:

def merge_sort(a_list):
print("Splitting ",a_list)
if len(a_list) > 1:
mid = len(a_list) // 2
left_half = a_list[:mid]
right_half = a_list[mid:] merge_sort(left_half)
merge_sort(right_half) i = 0
j = 0
k = 0 while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
a_list[k] = left_half[i]
i = i + 1
else:
a_list[k] = right_half[j]
j = j + 1 k = k + 1 while j < len(right_half):
a_list[k] = right_half[j]
j = j + 1
k = k + 1
while i < len(left_half):
a_list[k] = left_half[i]
i = i + 1
k = k + 1 print("Merging ", a_list) a_list = [54,26,93,17,77,31,44,55,20]
merge_sort(a_list)
print a_list

参考文档:

1 https://zh.wikipedia.org/wiki/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F

2 python解决数据结构和算法

上一篇:linux下视频转gif


下一篇:【Java学习笔记之十四】Java中this用法小节