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

91 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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 )

插入排序在短序列中速度最快

快速排序在其他情况中速度最快

堆排序速度于最快算法差距不大