这是我参与「第五届青训营 」伴学笔记创作活动的第 15天
数据结构与算法
01 · 为什么要学习数据结构和算法
数据结构和算法几乎存在于程序开发中的所有地方
什么是最快的排序算法 ?
Python -timsort C+ + -introsort Rust-pdqsort
Go 的排序算法有没有提升空间 ?
GO(< = 1 . 18 卜 introsort
02 · 经典排序算法
lnsertion sort 插入排序
将元素不断插入已经排序好的 array 中
· 起始只有一个元素 5 , 其本身是一个有序序列
· 后续元素插入有序序列中 , 即不断交换 , 直到找到第一个比其小的元素
缺点
· 平和最坏情况的时间复杂度高达 0(nA2)
优点
· 最好情况时间复杂度为 0 回
Quick sort 快速排序
分治思想 , 不断分割序列直到序列整体有序
· 选定一个 pivot ( 轴点 )
· 使用 pivot 分割序列 , 分成元素比 pivot 大和元素比 pivot 小两个序列
缺点
. 最坏情况的时间复杂度高达 O(nA2)
优点
。 平情况的时间复杂度为 0(n•10gn)
Heap sort 堆排序
利用堆的性质形成的排序算法
· 构造一个大顶堆
· 将根节点 ( 最大元素 ) 交换到最后一个位置 , 调整整个堆 , 如此反复
缺点
· 最好情况的时间复杂度高达 O(nlogn)
优点
· 坏情况的时间复杂度为 0(n•10gn)
插入排序平均和最坏情况时间复杂度都是 O(n ^ 2 〗 性能不好
快速排序整体性能处于中间层次
堆排序性能稳定 , ' 众生平等 '
根据序列元素排列情况划分
· 完全随枧的情况 ( random)
· 有序 / 逆序的情况 (softed/reverse)
· 元素重复度较高的情况 ( mod8 )
在此基础上 , 还需要枨据序列长度的划分 ( 16 / 128 / 1024 )
插入排序在短序列中速度最快
快速排序在其他情况中速度最快
堆排序速度于最快算法差距不大