原理分析
1、将一个序列从中间位置分为两个序列;
2、按照第一步继续将这两个子序列分为两部分;
3、直到所有子序列的长度都是1,也就是说,不能有两个截止日期。此时,两两合并成一个有序的序列。
实例
defmerge(arr,low,mid,high): #low和high是整个数组的第一个和最后一个位置索引,mid是中间位置索引 #以i和j为指针,初始位置分别为两个有序序列的起始位置 #LTMP用于存储合并后的序列 i=low j=mid+1 ltmp=[] whilei<=midandj<=high:#只要左右两边都有数字 ifarr[i]<arr[j]:#当左边的数量小于右边的数量时 ltmp.append(arr[i])#ltmp存储左边的数字 i+=1#左边的指针向右移动一个 else:#当右边的数量小于左边的数量时 ltmp.append(arr[j])#在ltmp中存储右侧的数 j+=1#右边的指针向右移动一个 #执行上述while语句后,左边或右边没有数字。 whilei<=mid:#左边还有数的时候 ltmp.append(arr[i])#将左边剩余的数字全部存储在ltmp中 i+=1 whilej<=high:#当右边有数字的时候 ltmp.append(arr[j])#将右边剩余的数字全部存储在ltmp中 j+=1 arr[low:high+1]=ltmp#将排序后的数组写回原数组 defmerge_sort(arr,low,high):#low和high是整个数组的第一个和最后一个位置索引 iflow<high:#至少有两个元素 mid=(low+high)//2 merge_sort(arr,low,mid)#将左边递归分解 merge_sort(arr,mid+1,high)#将右侧递归分解 merge(arr,low,mid,high)#做归并
以上是python合并排序的实现原则,希望对大家有所帮助。更多Python学习指导:基础教程python基础教程
本文教程操作环境:windows7系统Python 3.9.1,DELL G3电脑。