1.常见八大类数据结构
数组
栈
队列
链表
堆
哈希表(散列表)
树
图
2.常见算法
名称 | 英文名称 | *平均时间复杂度 | 最好时间复杂度 | 最差时间复杂度 | *空间复杂度 | *稳定性 |
---|---|---|---|---|---|---|
选择排序 | Selection | n² | n² | n² | 1 | 不稳定 |
冒泡排序 | Bubble | n² | n² | n | 1 | 稳定 |
*插入排序 | Insertion | n² | n² | n | 1 | 稳定 |
希尔排序 | Shell | n^1.3 | n² | n | 1 | 不稳定 |
*归并排序 | Merge | |||||
*快速排序 | ||||||
桶排序 | ||||||
计数排序 | ||||||
基数排序 |
星号是一定要熟记于心的。1
3.如何验证一个算法的正确性?
2.1 肉眼判别:如果算法复杂,肉眼不够可靠。
2.2 尽可能使用多的随机样本:单个样本的结果可能会有遗漏,样本越多准确率越高。
2.3 使用已知正确的算法对比自己的算法。
4.算法的性能
复杂度用大写字母O表示,大O符号根据其增长率来表征功能。
时间复杂度是[解决问题的方法]所消费的[时间]随着[计算规模]而[变化]的[规律]。
举个栗子:
有一个数组{1,2,3,4,5},计算他们的和需要逐个相加,一共需要加4次。
解决问题的方法:加法,
所消费的时间:求和要加(5-1)次,
计算规模:5个数,规模就是5,
变化的规律:每多1个数字,则需要多加一次,每多n个数字,则需要多加n-1次。
很明显,其时间复杂度就是O(n-1)。
空间复杂度是[解决问题的方法]所消费的[空间]随着[计算规模]而[变化]的[规律]。一个算法在计算机存储器上所占用的存储空间,包括存储算法本身所占用的存储空间,算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面。
举栗:求6的分解质因数有哪些,解为{2,3},原本只有一个数6,算完就变成了俩,其占用的存储空间翻倍,那么其空间复杂度为O(2)
排序算法的稳定性:
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,则称这种排序算法是稳定的;否则称为不稳定的。
持续更新…
欢迎各位评论交流指点,您的每一分评论和关注都是对星图的莫大鼓励!
如果对各位大佬有帮助,也请点个赞吧hhhh~
文献来源:马士兵说,《30秒让你记住所有排序算法-宋词记忆法》,B站,2019-03-18 ↩︎