排序
- 内(部)排序 - 排序时不涉及数据的内、外交换,即整个文件都是放在内存中处理
 
- 外(部)排序 - 排序时要进行数据的内、外交换
 
插入排序
直接插入排序 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,得到完整的有序序列 
- 时间复杂度 - 由增量序列决定
 
 
		 
		posted @ 
2018-10-27 14:57 
break大蜗牛 
阅读(
190) 
评论() 
 
收藏 
举报