博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MIT6.006Lec03:插入排序,归并排序,递归树
阅读量:6376 次
发布时间:2019-06-23

本文共 1586 字,大约阅读时间需要 5 分钟。

MIT6.006是算法导论课,Lec03主要讲插入排序,归并排序,以及分析方法(递归树)等。

插入排序,可以分为线性插入排序、二分插入排序,区别在于当把数组中某元素插入到前面的有序列表中时,前者遍历,后者二分,后者更加稳定。

归并排序,是用分治思想处理,先分别排序,再合并。

递归树,我的理解是算法消耗时间T(n)用树状的结构,表示每次递归消耗的时间,这些时间累加就是T(n),而递归树的每一行和相邻行之间的关系也是比较容易观察的,这就容易写出时间复杂度的表达式了。另外有主定理可以使用。

参考了《算法导论》和网络上的资源,以下是我修改后的代码:

#coding:utf8#插入排序 版本1(线性插入排序)def insertion_sort1(a):    for j in range(1, len(a)):        key = a[j]        i = j - 1        while i>=0 and a[i]>key:            a[i+1] = a[i]            i = i-1        a[i+1] = keyif __name__ == '__main__':    array = [2,2, 4, 32, 64, 34, 78, 23, 2345, 12, 1, 3, 2]    insertion_sort1(array)    for a in array:        print a

  

# coding:utf8 # 插入排序 版本2(二分插入排序) def binInsertSort(a):    n = len(a)    for j in range(1, n):        key = a[j]        i = j - 1        if key > a[i]:            continue        l, r = 0, i        while l <= r:            #print l, r            mid = (l + r) / 2            if key < a[mid]:                r = mid - 1            else:                l = mid + 1        k = j        while k > l:            a[k] = a[k - 1]            k = k - 1        a[l] = keyif __name__ == '__main__':    array = [2, 2, 4, 32, 64, 34, 78, 23, 2345, 12, 1, 3]    insertsort(array)    for a in array:        print a

  

#coding:utf8#归并排序#MIT6.006 Lec03def merge_sort(a, l, r):    '''归并排序主程序'''    if l < r:        m = (l + r) / 2        merge_sort(a, l, m)        merge_sort(a, m + 1, r)        merge(a, l, m, r)def merge(a, l, m, r):    '''归并两个有序表'''    left = a[l:m+1]    right = a[m+1:r+1]    len1 = len(left)    len2 = len(right)    i, j, k = 0, 0, l    while i

  

转载地址:http://fktqa.baihongyu.com/

你可能感兴趣的文章
Spring Security整合KeyCloak保护Rest API
查看>>
POS概述
查看>>
containerd发布了CRI修复程序和CVE-2019-5736更新的runc
查看>>
77. Combinations
查看>>
WEB前端开发的思考与感悟
查看>>
实现了所有主流APP的分类切换效果,可快速接入,灵活扩展(swift)
查看>>
微信自动跳转浏览器打开APP(APK)下载链接
查看>>
==与===的区别
查看>>
机器学习实验笔记
查看>>
不同工具查看代码分支diff的差异
查看>>
一文 | 跨域及其解决方案
查看>>
白话Java I/O模型
查看>>
[TsAdmin]--一款基于Vue.js+Element UI的单页无刷新(无iframe)多选项卡的后台管理系统模板...
查看>>
排列组合技术
查看>>
哈工大发明“电子体毛”,让机器人学会“敏感”
查看>>
上传一张照片,让算法告诉你是否患有抑郁症
查看>>
VR厂商唯晶科技获2800万C+轮融资,曾开发过游戏《圣女之歌》
查看>>
Countly 19.02.1 发布,实时移动和 web 分析报告平台
查看>>
TCP连接中time_wait在开发中的影响-搜人以鱼不如授之以渔
查看>>
Oracle数据库机出新帮助不同规模企业迈向云端
查看>>