目录
一、插入排序
1.直接插入排序
2.二分法插入排序(利用已排序列有序性)
3.表插入排序(减少移动次数)
插入记录Ri时,R0至Ri-1已排好序
先将Ri脱链, 采用顺序比较的方法找到Ri应插入的位置,将Ri插入链表
4.shell希尔 排序(缩小增量排序)
一个序列->由间距d的元素构成的d 个“子序列”。
反复做:
①在每个子序列内部分别排序
②缩小d之后重复①,直到d缩小为1 时再做一次排序
(即对整个序列排序)
二、选择排序
从空排序序列开始,
每次
从未排序
记录
中选
排序码最小
的记录,与未排序段的
第一个
记录
交换,直到所有记录排好序
1.直接选择排序(效率<直接插入排序)
直接选择排序效率较低,第i
趟排序需要作
n-
i
次比较,没有利用已做的比较结果
![](https://img-blog.csdnimg.cn/451b332a8f2e491484907b7e366ebc22.jpeg)
2.堆排序(高效,适合n值大)
不同分支中有排序码相同的结点,算法没法保证它们在最终排序序列里的位置关系
三、交换排序
依次比较
相邻数据项
,若某两项
次序颠倒
(
逆序
),则交换它们
1.起泡排序
2.快速排序/分区交换排序
所有
大于
R
0
的记录移到
R
0
的
右边
,
所有
小于
R
0
的记录移到
R
0
的
左边
递归
地分别对两组记录采用同样方式排序,直至划分到
每个
子部分
只包含
一个
记录
![](https://img-blog.csdnimg.cn/4595078e66a2487db015330dfbd802b2.jpeg)
四、分配排序/基数排序
将所有待比较数字统一为统一位数长度,接着从最低位开始,依次进行排序。
- 按照个位数进行排序。
- 按照十位数进行排序。
- 按照百位数进行排序。
五、归并排序(适合外存顺序访问效率高、随机访问效率低)
把待排序的文件分成若干个子文件,先将每个子文件内的记录排序,再将已排序的子文件合并,逐步得到完全排序的文件
1.二路归并排序
速度较快 :Shell排序、堆排序、快速排序、归并排序