排序算法--归并排序算法解析

社会主义新天地 提交于 2019-11-28 21:46:00

一、归并算法理解

在理解归并排序算法之前,我们先了解一下,什么是归并算法。

一次归并运算的动画示意图,如下:

如动画所示,红色虚线为中,将列表分成左右两份,且都是元素从小到大的有序列表。两个指针分别指向两份列表头部,

比较两个指针所指元素大小,提取小的元素,并将小的元素指针向右移动。接着继续比较,如此循环,最终形成一个有序的列表。

代码示例:

 1 def  merge(l,left,mid,right):
 2     i = left
 3     j = mid +1
 4     temp = []
 5     while i <= mid and j <= right:#左右指针都在移动情况
 6         if l[i] <= l[j]:
 7             temp.append(l[i])
 8             i += 1
 9         else:
10             temp.append(l[j])
11             j += 1
12     while i <= mid:  #右指针已经到达右半列表尾部,左指针还没到达。
13         temp.append(l[i])
14         i += 1
15     while j <= right: #左指针已经到达左半列表尾部,右指针还没到达。
16         temp.append(l[right])
17         j += 1

二、归并排序算法思路

1、将列表分解,直至分成一个元素。

2、一个元素是有序的。

3、通过归并算法,逐层将两个有序列表归并,直至形成一个有序的列表。

示意图如下:

代码示例:

1 def mergesort(l,left,right):
2     if left < right:
3         mid = (left + right) //2
4         mergesort(l,left,mid)  #分解
5         mergesort(l,mid+1,right) #分解
6         merge(l,left,mid,right) #归并

整个分解和归并过程运用了递归思想!

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!