排序算法是数据结构中的一大重点,本节课讲述了多个排序算法在Go中的实现与应用,
一、插入排序Insertion Sort
(一)核心思想
将元素不断插入已经排序好的array 中
(二)缺点
平均和最坏情况的时间复杂度高达O(n^2)
(三)优点
最好情况时间复杂度为O(n)
二、快速排序 Quick Sort
(一)核心思想
分治思想,不断分割序列直到序列整体有序。
(二)实现方法
- 选定一个pivot (轴点)
- 使用pivot分割序列,分成元素比 pivot大和元素比 pivot 小两个序列
(三)缺点
最坏情况的时间复杂度高达O(n^2)
(四)优点
平均情况的时间复杂度为O(n*logn)
三、堆排序
(一)核心思想
利用堆的性质形成的排序算法
(二)实现方法
构造一个大顶堆,将根节点(最大元素)交换到最后一个位置,调整整个堆,如此反复。
(三)缺点
最好情况的时间复杂度高达O(n*logn)
(四)优点
最坏情况的时间复杂度为O(n*logn)
四、三大排序算法比较
(一)初步比较
插入排序平均和最坏情况时间复杂度都是O(n个2),性能不好
快速排序整体性能处于中间层次
堆排序性能相对稳定
(二)不同长度序列下的比较
- 插入排序在短序列中速度最快
- 快速排序在其他情况中速度最快
- 堆排序速度与最快算法差距不大
五、总结
本文主要介绍了三种基本算法的实现方法与优缺点,在选取算法时,需要针对需要进行排序的序列进行选择,不同情况下应该选择不同的最优算法。下节课将会讲解不稳定的pdq算法。