什么是归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归并排序的思想
首先按照n//2,n代表数组的长度,把列表分成两部分,然后接着把分出来的列表再进行上述的操作,直到n=1,然后返回,这个过程需要用递归实现。拆分完了,先对最后拆出来的进行有序组合,然后对他上一层的拆分结果,再进行有序组合,最后得到的数组就是我们想要的有序数组。
过程
如何进行有序绑定
1.新建一个空列表,分别比较两个有序列表的第一位,把小的那一个放入到新列表中,并且在原来列表中删除。
2.接着比较两个列表的第一位,把小的追加到列表中新列表中,并且在原来列表中删除。 3.如果其中一个列表空了,只需要把另外一个列表剩下的元素追加到新列表中,这个新列表就是我们想要的排序 结果。
代码
def merge_sort( li ):
if len(li) == 1:
return li
mid = len(li) // 2
left = li[:mid]
right = li[mid:]
ll = merge_sort( left )
rl =merge_sort( right )
return merge(ll , rl)
def merge( left , right ):
result = []
while len(left)>0 and len(right)>0 :
if left[0] <= right[0]:
result.append( left.pop(0) )
else:
result.append( right.pop(0) )
result += left
result += right
return result
l = [5,4 ,3 ,2 ,1,22,0]
li = merge_sort(l)
print(li)