排序算法-归并排序
来源:互联网 发布:音频提取软件apk 编辑:程序博客网 时间:2024/06/05 19:00
归并排序
算法描述
归并排序利用了分治法的思想,不是原址排序,算法思路是:(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)
阅读全文
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 11月21号 瞎写
- Kubernetes特点及功能
- Python高效编程-为元组的每个元素命名
- [Leetcode] 467. Unique Substrings in Wraparound String 解题报告
- hive权限管理整理
- 排序算法-归并排序
- 第三届上海大学生网络安全大赛juckcode
- java实现MD5加密 MD5Util工具类
- Http请求
- 解决Android3.0以后不能使用butterknife问题
- Go并发
- Windows端部署Scala2.10.5开发环境
- Android学习 ——SystemUIService之SettingsUI分析
- java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类HashMap Hashtable LinkedHashMap 和TreeMap.