一、归并算法理解
在理解归并排序算法之前,我们先了解一下,什么是归并算法。
一次归并运算的动画示意图,如下:
如动画所示,红色虚线为中,将列表分成左右两份,且都是元素从小到大的有序列表。两个指针分别指向两份列表头部,
比较两个指针所指元素大小,提取小的元素,并将小的元素指针向右移动。接着继续比较,如此循环,最终形成一个有序的列表。
代码示例:
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) #归并
整个分解和归并过程运用了递归思想!
来源:http://www.cnblogs.com/cjlyd233/p/7462077.html