排序算法
插入排序
1. 直接插入排序
57,68,59,52排序
- 将57作为关键字,57就在第一位不需要变动(57,68,59,52)
- 将68作为关键字,与第一位57比较,放在57后面(57,68,59,52)
- 将59作为关键字,与57,69比较,放在57后面(57, 59,68, 52)
- 将52作为关键字,与前面的数比较,放在57前面(52,57, 59,68)
2. shell(希尔)排序
选择排序
1. 简单选择排序
57,68,59,52排序
- 找最小值52,52与第一个数调换位置52】68,59,57
- 找68,59,57的最小值57,与第二个数调换位置52,57】59,68
- 找59,68的最小值59,59就在第三位置 52,57,59】68
- 剩余一个数不需要再比较
2.堆排序
大顶:根节点大于两个子节点。
小顶:根节点小于两个子节点。
从第n/2的节点开始调整(最大值为84,调整84和56的位置)
调整第(n/2)-1的节点(这个刚好符合大顶堆的要求不需要改变)
调整第(n/2)-2的节点(最大值为84,调整84和46的位置)
调整后46和56比较不符合大顶堆的要求,调换46和56的位置
初始堆完成 选B
排序:
1.将最大根节点与最后一个叶子节点调换位置并删除连接
2.重新构建堆
3.将根节点与最后第二个叶子结点调换位置并删除连接
4.重新构建堆
交换排序
1. 冒泡排序
从最后两个数进行,将小的数排在前面,然后小的数与前一个数进行比较,然后将最小的数排在前面~~~。第一轮过后最小的数就排在了第一位,然后将第一位数看成一个新的数字序列重新排序
- 快速排序
首先选择一个关键字(基准数)比如57,进过比较后57前面的都比它小57后面的都比它大,然后缩小范围将57前面的重新排序将57后面的重新排序,最后的结构就像这样[]1[]2[]3[]4[]5[]6[]7[]
归并排序
基数排序
首先按个位进行排序,然后对生成的序列按十位排序,然后对生成的序列按百位排序
稳定的排序算法
相同的数,如果排序之前的位置在前的永远在前面