这是我参与「第五届青训营 」伴学笔记创作活动的第14天
本文为青训营课程笔记,配合原课程食用效果更佳哦~
课程笔记
一、为什么要学习数据结构和算法
例子-抖音直播排行榜功能
规则:某个时间段内,直播间礼物数TOP10房间获得奖励,需要在每个房间展示排行榜 解决方案 • 礼物数量存储在 Redis-zset 中,使用 skiplist 使得元素整体有序 • 使用 Redis 集群,避免单机压力过大,使用 主从算法、分片算法 • 保证集群原信息的稳定,使用 一致性算法 • 后端使用 缓存算法(LRU) 降低 Redis 压力,展示房间排行榜 数据结构和算法几乎存在于程序开发中的所有地方
二、排序算法详解
-
插入排序
-
Insertion Sort 插入排序
将元素不断插入已经排序好的 array 中
• 起始只有一个元素 5 ,其本身是一个有序序列
• 后续元素插入有序序列中,即不断交换,直到找到第一个比其小的元素
缺点• 平均和最坏情况的时间复杂度高达 O(n^2)
优点• 最好情况时间复杂度为 O(n)
-
-
快速排序
-
Quick Sort 快速排序
分治思想,不断分割序列直到序列整体有序
• 选定一个 pivot (轴点)
• 使用 pivot 分割序列,分成元素比 pivot 大 和元素比 pivot 小两个序列
缺点• 最坏情况的时间复杂度高达 O(n^2)
优点• 平均情况的时间复杂度为 O(n*logn)
-
-
堆排序
-
Heap Sort 堆排序
利用堆的性质形成的排序算法
• 构造一个大顶堆
• 将根节点(最大元素)交换到最后一个位置,调整整个堆,如此反复
缺点• 最好情况的时间复杂度高达 O(n*logn)
优点• 最坏情况的时间复杂度为 O(n*logn)
-
-
Benchmark
-
根据序列元素排列情况划分
• 完全随机的情况(random)
• 有序/逆序的情况(sorted/reverse)
• 元素重复度较高的情况(mod8)
在此基础上,还需要根据序列长度的划分(16/128/1024)
-
总结收获
通过样例与知识点结合的方式,学到了一些数据结构与算法的知识;
通过样例的讲解,更了解了具体的数据结构与算法的原理和实现;
又是收获满满的一天
引用参考
青训营官方课程视频
青训营官方课程文档
青训营官方课程笔记