排序
- 内(部)排序 - 排序时不涉及数据的内、外交换,即整个文件都是放在内存中处理
- 外(部)排序 - 排序时要进行数据的内、外交换
插入排序
直接插入排序 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大蜗牛
阅读(
179)
评论()
编辑
收藏
举报