常用排序算法简介
2015-11-13 16:34
239 查看
目录
[toc]
说明:本博客所有图片来自书籍《算法导论》,在此感谢本书作者!
下面简单介绍一下插入、归并、堆排序、快速排序等常用排序算法。
顾名思义,插入排序即将没有排好顺序的数据插入到已经排好顺序的数据中。插入排序类似我们玩扑克牌,如图1所示,例如2/4/5/10是已经排好的序列,那么新来了一个数字7,从最后面数字10开始找,7小于10那么继续与前面的数字比较,7大于5,因此7排在5的后面,即将7插入在5的后面。
图1 插入排序示意图
**例子讲解**
图2为插入排序的一个例子。原始数组A=[5,2,4,6,1,3],矩阵的上面是数组的上标。
1. 首先(a)中位置2与位置1比较大小,2小于5,交换位置,如(b);
2. 然后(b)中位置3与位置2比较大小,4小于5,交换位置,接着位置2与位置1比较大小,4大于2,停止,如(c);、
3. 依次类推,直到数组排序完成,如(f)。
图1 插入排序示意图
**插入排序升序伪代码**
插入排序总结
从伪代码直到,插入排序不需要复制数组,是原址的( in place)。插入排序的时间复杂度为T(n) = O(n^2)。
今天暂时到这里,明天更新归并排序。
[toc]
说明:本博客所有图片来自书籍《算法导论》,在此感谢本书作者!
下面简单介绍一下插入、归并、堆排序、快速排序等常用排序算法。
插入排序
原理介绍:顾名思义,插入排序即将没有排好顺序的数据插入到已经排好顺序的数据中。插入排序类似我们玩扑克牌,如图1所示,例如2/4/5/10是已经排好的序列,那么新来了一个数字7,从最后面数字10开始找,7小于10那么继续与前面的数字比较,7大于5,因此7排在5的后面,即将7插入在5的后面。
图1 插入排序示意图
**例子讲解**
图2为插入排序的一个例子。原始数组A=[5,2,4,6,1,3],矩阵的上面是数组的上标。
1. 首先(a)中位置2与位置1比较大小,2小于5,交换位置,如(b);
2. 然后(b)中位置3与位置2比较大小,4小于5,交换位置,接着位置2与位置1比较大小,4大于2,停止,如(c);、
3. 依次类推,直到数组排序完成,如(f)。
图1 插入排序示意图
**插入排序升序伪代码**
//数组下标从0开始 insertion_sort(A) { //A是一个数组 for i = 1:A.Length-1 { //A.Length是数组的长度 key = A[i]; //记录新插入的数据 j = i-1; while(key<A[j]&&j>=0) { A[j+1] = A[j]; //前一个数移动到后一个位置 --j; } A[j+1] = key; //将新数据插入到新的位置 } }
插入排序总结
从伪代码直到,插入排序不需要复制数组,是原址的( in place)。插入排序的时间复杂度为T(n) = O(n^2)。
今天暂时到这里,明天更新归并排序。
相关文章推荐
- linux shell中FS、OFS、RS、ORS图解
- swift 自行理解
- 使用类似于中介者模式实现不同VC之间的跳转
- 【转】request和response的页面跳转传参
- FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
- 如何快速突破GRE考试写作【zhasite】
- 面试总结4--多线程问题
- 勾股定理
- Oracle中的join
- Spring + Atomikos 分布式事务实现方式
- 验证Request传过来的值是否为空
- mybatis与hibernate区别
- 【音频播放】
- Android 分裂的多面性
- oracle杀死进程
- 思考作为技术人员的成长问题
- 由cell上的button确定cell的indexPath
- swift变量交换赋值
- Windows server 2008 R2配置路由和***
- 集合相等问题