经典排序算法 | 青训营笔记

98 阅读1分钟

一、为什么要学习数据结构算法

例子:抖音直播排行榜功能

解决方案:

礼物数量存储在Redis-zset中,使用skiplist使得元素整体有序

使用Redis集群,避免单机压力过大,使用主从算法、分片算法

保证集群原信息的稳点,使用一致性算法

后端使用缓存算法(LRU)降低Redis压力,展示房间排名

二、经典的排序算法

1、插入排序(Insertion Sort) 主要思想可以想象为打牌

12bda5f6e4f2057dc3bb98eb1bf72fe.jpg

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

起初只有一个元素5,其本身是一个有序序列

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

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

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

2、快速排序(Quick Sort)

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

选定一个pivot(轴点)

使用pivot分割序列,分成元素比pivot大和元素比pivot小两个序列

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

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

3、堆排序(Heap Sort)

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

构造一个大顶堆

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

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

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