[Data Structure & Algorithm] 插入排序
排序
- 内(部)排序 - 排序时不涉及数据的内、外交换,即整个文件都是放在内存中处理
- 外(部)排序 - 排序时要进行数据的内、外交换
插入排序
直接插入排序 Straight Insertion Sort - 最简单
- 基本操做
1.比较关键字
2.移动记录
- 具体实现
- 设置监视哨SqList[0] = i(待插入的值)
- 从数组的末尾开始循环,把比i大的值都向后移一位,直到碰上比i小的值,插入i
- 空间上 - 监视哨须要额外空间
- 时间上 - O(n2)
- 最好状况 - 正序 - 插入第i个值,比较1次,无需移动
- 最坏状况 - 逆序 - 插入第i个值,比较i次,移动i-1次
- 二者平均获得该算法的时间复杂度
- 适用于
折半插入排序
- 改进第一步 比较关键字
- 时间复杂度 - O(n2)
2路插入排序
- 同时改进第一步(折半查找)和第二步
- 基本思路 - 移动记录改进
1.把第一个记录r[1]做为分界线,将待排序的序列分为两部分
2.比r[1]小的,插入到r[1]以前的序列中;比r[1]大的,插入到r[1]后面的序列中
- 空间上 - 须要额外n个空间
- 时间上 - O(n2)
- 最好状况 - r[1]在待排序列的中间,则能够减小一半的移动次数
- 最坏状况 - r[1]是最大或最小值,没有任何优化
希尔排序 Shell‘s sort - 缩小增量排序 Diminishing increment sort
- 基本思路
1.肯定增量序列,如{1,3,5}
- h1= 1的递增整数序列
2.从增量序列中的最大值开始,依次对待排序列进行划分
3.对于划分出的子序列用直接插入排序,直到最终的增量为1,获得完整的有序序列
- 时间复杂度 - 由增量序列决定
欢迎关注本站公众号,获取更多信息