MIT6.006Lec03:插入排序,归并排序,递归树
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] = key if __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] = key if __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 Lec03 def 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<len1 and j < len2:
if left[i] < right[j]:
a[k] = left[i]
i = i + 1
else:
a[k] = right[j]
j = j + 1
k += 1
while i<len1:
a[k] = left[i]
k += 1
i += 1
while j<len2:
a[k] = right[j]
k += 1
j += 1 if __name__ == '__main__':
array = [2, 2, 4, 32, 64, 34, 78, 23, 2345, 12, 1, 3, 2]
merge_sort(array, 0, len(array)-1)
for a in array:
print a
MIT6.006Lec03:插入排序,归并排序,递归树的更多相关文章
- 算法导论 - 基础知识 - 算法基础(插入排序&归并排序)
在<算法导论>一书中,插入排序作为一个例子是第一个出现在该书中的算法. 插入排序: 对于少量元素的排序,它是一个有效的算法. 插入排序的工作方式像许多人排序一手扑克牌.开始时,我们手中牌为 ...
- react封装组织架构递归树
想用react实现一个递归树,但一些框架里面的有些不符合需求,于是自己写了个,功能比较简单,欢迎批评指正.. react实现这样一个组织架构递归树,下级部门的收起和展开,点击部门名称时请求接口获取下级 ...
- 【整理】iview Tree数据格式问题,无限递归树处理数据
iview Tree数据格式问题,无限递归树处理数据 https://juejin.im/post/5b51a8a4e51d455d6825be20
- 递归树处理,配合vue的vueTreeselect组件使用
在项目中经常会使用到tree,并且需要对递归树进行操作. 在vue项目中,使用vue-treeselect插件(https://vue-treeselect.js.org/) 使用中遇到的问题: 1. ...
- C/C++深度优先搜索(递归树模拟)
//C++深度优先搜索(递归树模拟) #define _CRT_SECURE_NO_WARNINGS #include <iostream> #define MAX_N 1000 usin ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- 最全 C 语言常用算法详解-排序-队列-堆栈-链表-递归-树 (面试有用)
具体 源代码 案例查看github,持续更新中............ github地址:https://github.com/Master-fd/C-Algorithm 1. 二分法查找 2. 冒泡 ...
- swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念
***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...
- C#.NET 大型通用信息化系统集成快速开发平台 4.0 版本 - 用户权限树的实现 -- 权限递归树
业务系统里经常会需要计算类似的树形权限树的业务需求 1:往往会有一些需求,a 对 b 有权限, b对c 有权限, 等等. 2:还需要很直观的看到,整个权限的树形关系,一目了然的那种. 3:程序调用简单 ...
随机推荐
- pre-processing预处理
什么是神经网络?神经网络是由很多神经元组成的,首先我们看一下,什么是神经元1.我们把输入信号看成你在matlab中需要输入的数据,输进去神经网络后2.这些数据的每一个都会被乘个数,即权值w,然后这些东 ...
- Python【第三方模块&标准模块】
模块: 模块其实就是一个python文件 1.标准模块.标准包 #python自带的这些模块,直接import就能用的 import string,random,datetime,os,json 2. ...
- Guava之CaseFormat
com.google.common.base.CaseFormat是一种实用工具类,以提供不同的ASCII字符格式之间的转换. 其对应的枚举常量 从以上枚举中可以看出,java程序员最常用的转换类型为 ...
- P2831 愤怒的小鸟
P2831 愤怒的小鸟 从 \((0, 0)\) 发射一只鸟, 轨迹满足抛物线, 问最少几只鸟可以打完 \(n <= 18\) 只猪 错误日志: 处理抛物线数组没有初始化 Solution 数据 ...
- Nginx记录-Nginx配置
1. 启动,停止和重新加载Nginx配置 要启动nginx,请运行可执行文件. 当nginx启动后,可以通过使用-s参数调用可执行文件来控制它. 使用以下语法: nginx -s signal 信号( ...
- tips 前端 bootstrap 嵌套行 嵌套列 溢出 宽度不正确 栅格化系统计算
bootstrap 当嵌套列时 有时会出现很奇异的row 的width不对问题出现的情况时 <div class="row" > <!--row a--> ...
- 安装解压版的mariadb
今天尝试了安装解压版的mariadb,在官网上https://downloads.mariadb.org/下载了5.5版本的mariadb的zip压缩包, 经过实践发现mariadb解压版安装与mys ...
- 【测试笔记】Redis学习笔记(十二)性能测试
http://blog.csdn.net/yangcs2009/article/details/50781530 Redis测试服务器一 redis_version:2.8.4 www@iZ23s8a ...
- Overfitting & Regularization
Overfitting & Regularization The Problem of overfitting A common issue in machine learning or ma ...
- Docker 启动Centos
docker run -d -e "container=docker" --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup --n ...