归并的意思是将两个或两个以上的有序表组合成一个新的有序表。而归并排序是在归并操作上的一种有效的排序算法,该算法是采用分治法的一个有效应用。
先使得序列有序,然后对有序序列进行合并。
def merge(left,right):
l,r=0,0
result=[]
while l<len(left) and r<len(right)://当一个数组中全部取光就退出循环
if left [l] < right [r]://比较两个数组中,未添加到result中的
//元素,中最小元素的大小
//然后取出较小者,添加到result中
result.append(left[l])
l+=1
else:
result.append(right[r])
r+=1
if l<len(left)://判断left中的元素是否全部添加到result中,
//如果没有,则将剩下的添加到result中。否则,将right中的剩下
//的元素添加到result中。
result+=left[l:]
else:
result+=right[r:]
return result
在python中,定义Merge函数,用来合并两个序列。需要传入的参数为两个有序的序列。设置两个数l,r分别代表序列left和right中需要比较的数字的索引。还需设置一个result来表示Merge函数返回的结果。
函数的整体意思相当于,合并两摞从小到大、正面朝上的扑克牌。显然,两摞牌中都只能看见最上面的那张牌。而我们需要做的是,就是比较可以看见的两张扑克的大小,取出小者,放在手里,不改变朝向,然后继续比较可以看见的两张扑克,取出小者放在先前取出的扑克的下面。不断执行,直到一摞扑克取光,就可以将剩下的一摞扑克,整体放到手里的那摞扑克下面。就这样完成了将两摞有序扑克合并成一摞有序扑克的操作。
最后的一个if就是判断哪个序列,还剩下部分,然后将剩下的部分全部添加到result后面。
def mergeSort(list):
if len(list)==1:
return list
middle=len(list)//2
left=mergeSort(lists[:middle])
right=mergeSort(lists[middle:])
return merge(left,right)
然后就是MergeSort函数。如果传如的数组长度为1,则直接返回结果,因为不用比较大小。整体的思想就是,不断分割数组的长度,直到长度为1,然后开始合并。