排序算法-归并排序
2017-11-21 11:28
155 查看
归并排序
算法描述
归并排序利用了分治法的思想,不是原址排序,算法思路是:(1)分解,将待排序序列递归的分解为两个子序列(从中间位置分解),最终子序列只包含一个元素,即每个子序列都是排好序的;(2)合并,将已经排好序的子序列由下向上合并。算法实现(python)
#将两个排好序的子序列arr[p:q]和arr[q:r]合并 def mergeArray(arr,p,q,r): n1=q-p+1 n2=r-q L=[] #L[]存放左序列 R=[] #R[]存放右序列 for i in range(n1): L.append(arr[p+i-1]) for j in range(n2): R.append(arr[q+j]) L.append(max(arr)+1) #设置两个哨兵,其值大于序列最大值即可 R.append(max(arr)+1) #哨兵的作用在两个子序列合并时,一方显示哨兵,则其不可能是较小的一方。 i=0 j=0 for k in range(p-1,r): if L[i]<=R[j]: arr[k]=L[i] i=i+1 else: arr[k]=R[j] j=j+1 #序列分解 def mergeSort(arr,p,r): if p<r: q=int((p+r)/2) mergeSort(arr,p,q) mergeSort(arr,q+1,r) mergeArray(arr,p,q,r) if __name__=="__main__": arr=[1,4,2,6,5,33,2,44,9,34,23] mergeSort(arr,2,7) print arr
算法间复杂度
合并分别包含m和n个元素的已排好序的子序列,需要比较m+n次,因此时间复杂度为二叉递归树的高度(logn)*每层的基础操作数(序列元素数n)。最好情况:O(n*logn)
最差情况:O(n*logn)
平均情况:O(n*logn)
相关文章推荐
- 排序算法二(归并排序、快速排序、希尔排序)
- 深入浅出理解排序算法之-归并排序
- 排序算法(二)-- 归并排序
- 排序算法详解【归并排序-Merge_Sort】
- 常用排序算法(七)归并排序
- 复习数据结构:排序算法(四)——归并排序
- 排序算法Python(冒泡、选择、快速、插入、希尔、归并排序)
- 排序算法-归并排序
- 排序序列排序算法总结(二)——快速排序、归并排序
- [027]八大排序算法详解——归并排序
- 常用的排序算法(快速排序、插入排序、希尔排序、堆排序、冒泡排序、选择排序、归并排序)
- 算法 排序算法之归并排序
- 排序算法-归并排序
- 常见的排序算法(四)( 归并排序,计数排序 , 基数排序)
- 排序算法复习(Java实现):插入,冒泡,选择,Shell,快速排序, 归并排序,堆排序,桶式排序,基数排序
- 排序算法-归并排序
- 【排序算法】归并排序
- 排序算法系列之归并排序
- 排序算法之归并排序
- 排序算法的C语言实现-归并排序