[数据结构与算法 | 青训营笔记 ]

88 阅读2分钟

排序算法是数据结构中的一大重点,本节课讲述了多个排序算法在Go中的实现与应用,

一、插入排序Insertion Sort

(一)核心思想

将元素不断插入已经排序好的array 中

(二)缺点

平均和最坏情况的时间复杂度高达O(n^2)

(三)优点

最好情况时间复杂度为O(n)

二、快速排序 Quick Sort

(一)核心思想

分治思想,不断分割序列直到序列整体有序。

(二)实现方法

  1. 选定一个pivot (轴点)
  2. 使用pivot分割序列,分成元素比 pivot大和元素比 pivot 小两个序列

(三)缺点

最坏情况的时间复杂度高达O(n^2)

(四)优点

平均情况的时间复杂度为O(n*logn)

三、堆排序

(一)核心思想

利用堆的性质形成的排序算法

(二)实现方法

构造一个大顶堆,将根节点(最大元素)交换到最后一个位置,调整整个堆,如此反复。

(三)缺点

最好情况的时间复杂度高达O(n*logn)

(四)优点

最坏情况的时间复杂度为O(n*logn)

四、三大排序算法比较

(一)初步比较

插入排序平均和最坏情况时间复杂度都是O(n个2),性能不好
快速排序整体性能处于中间层次
堆排序性能相对稳定

(二)不同长度序列下的比较

  1. 插入排序在短序列中速度最快
  2. 快速排序在其他情况中速度最快
  3. 堆排序速度与最快算法差距不大

五、总结

本文主要介绍了三种基本算法的实现方法与优缺点,在选取算法时,需要针对需要进行排序的序列进行选择,不同情况下应该选择不同的最优算法。下节课将会讲解不稳定的pdq算法。