归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为O(nlogn)。
1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归
可以同时进行。
当初为什么这个算法被发明,是为了解决什么实际问题,我尽量去搜索,可是,一直没找到答案。不过,可以肯定的是,
在这个计算机刚横空出世的年代,为了解决一些问题,发明这种算法就不足为奇了。
该算法的操作步骤:
- 将序列每相邻两个数字进行归并操作,形成ceil(n/2)个序列,排序后每个序列包含两/一个元素
- 若此时序列数不是1个则将上述序列再次归并,形成ceil(n/4)个序列,每个序列包含四/三个元素
- 重复步骤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解决数据结构和算法
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |