数据结构与算法(1)|青训营笔记

121 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇

introsort(内观排序)

插入排序

1.起始只有一个元素,本身就是一个有序序列

2.后续元素插入有序序列中,即不断交换,直到找到第一个比他小的元素

可以这么理解:也就是说,在排序的过程,往前看,比前面小,就与前面的交换,当相等的时候就停下,不交换

Best:O(N) Avg(O(n^2)) Worst(O(n^2)) 缺点是:平均和最坏情况的时间复杂度高达(O(n^2)),性能不好 优点是:最好情况时间复杂度为O(N),因为在交换排序中时间复杂度最快的就是O(N)

快排序:

快排的时间复杂度 Best:O(NlogN) Avg;O(NlogN) Worst:O(n^2)

堆排序:先构造一个大根堆,然后将根节点(最大的元素),交换到最后一个位置,调整整个堆,反复操作

堆排续的时间复杂度 Best:O(NlogN) Avg;O(NlogN) Worst:O(NlogN) **缺点就是最快也是O(NlogN),优点就是比较稳定**

分别在短,中,长三种序列中:

在短序列(16)中:三种排序最快的是插入排序

在中序列(128)中:三种排序最快的是快排序,但与堆排序差距也不大

在长序列(1024)中:三种排序最快的是快排序

插入排序在短序列中速度最快,快排序在其他情况最快,堆排序速度与最快的差距不大

特殊的情况

在sorted(正序)的情况下 插入排序在序列有序的情况下是最快的

所有的短序列和元素有序情况下,插入排序是最好的

在大部分的情况下,快速排序是性能较好的

在大多数情况下,堆牌都具有比较好的稳定性

插入排序相当于单车,快排相当于汽车,堆排,相当于地铁