排序——归并排序
2016-02-17 12:38
232 查看
排序——选择排序
排序——冒泡排序及其改进版本
归并排序由冯诺依曼于 1945 年发明;
采用二分的思想,对一个无序数列的最终排序,我们需要首先定义对两个已排序序列的合并算法:
采用递归及二分的思想,进行最终的归并排序:
算法时间复杂度分析:
t(n)===2t(n/2)+n2(2t(n/2)+n/2)+nnlogn+n
最终的时间复杂度为:O(nlogn)
排序——冒泡排序及其改进版本
归并排序由冯诺依曼于 1945 年发明;
采用二分的思想,对一个无序数列的最终排序,我们需要首先定义对两个已排序序列的合并算法:
def merge(l1, l2): l3 = [] i, j = 0, 0 n1, n2 = len(l1), len(l2) while i < n1 and j < n2: if l1[i] <= l2[j]: l3.append(l1[i]) i += 1 else: l3.append(l2[j]) j += 1 if i < j: l3.extend(l1[i:]) else: l3.extend(l2[j:]) return l3
采用递归及二分的思想,进行最终的归并排序:
def merge_sort(l): n = len(l) if n < 2: return l m = n//2 l1 = merge_sort(l[:m]) l2 = merge_sort(l[m:]) return merge(l1, l2)
算法时间复杂度分析:
t(n)===2t(n/2)+n2(2t(n/2)+n/2)+nnlogn+n
最终的时间复杂度为:O(nlogn)
相关文章推荐
- 安卓开发 无线调试
- JsPlumb绘制拓扑图的通用方法
- css less
- Swift 单例与懒加载
- HDU 1159:Common Subsequence
- Android 绘制圆形图片
- AutoTile 自动拼接 番外篇(自动融合技术)
- 【HDU 1003】 Max Sum
- rsync后台服务模式
- GNU C库「glibc」getaddrinfo 发现重大漏洞
- [DevExpress]C#picturebox或者Dev控件 PictureEdit 按比例的缩放加载图片
- 二维码扫描
- Android 获取验证码后 在Button控件上 显示倒计时
- Python 基础——random模块
- 51NOD1125交换机器的最小代价(贪心算法)
- AtomicInteger介绍
- 手机支付宝扫一扫 给郝萌主捐赠
- 使用gulp在开发过程中合理导出zip文件
- 强连通分量总结
- python 批量关注好友