排序算法宋词记忆法

排序算法宋词记忆法

排序:将无序的数据排列成有序数据

常见排序算法

编号 中文名称 英文名称 平均时间复杂度 最坏时间复杂度 最好时间复杂度 空间复杂度 稳定性
1 选择排序 Selection n^2 n^2 n^2 1 不稳
2 冒泡排序 Bubble n^2 n^2 n 1
3 * 插入排序 Insertion n^2 n^2 n 1
4 * 堆排序 heap n * log2(n) n * log2(n) n * log2(n) 1 不稳
5 希尔排序 Shell n^1.3 n^2 n 1 不稳
6 * 归并排序 Merge n * log2(n) n * log2(n) n * log2(n) n
7 * 快速排序 Quick n * log2(n) n^2 n * log2(n) log2(n) 不稳
8 桶排序 Bucket n + k n^2 n n + k
9 计数排序 Counting n + k n + k n + k n + k
10 基数排序 Radix n * k n * k n * k n + k

其中打 * 的是最重要的4种排序算法,需要记住它们的

一般不用记最坏和最好时间复杂度,只需要记住平均时间复杂度即可

马某的宋词记忆法:

《忆秦娥 娄山关》毛泽东
西风烈,
长空雁叫霜城月,
雄关漫道真如铁,
而今迈步从头越。。。

马某:《忆排序 我最强》
选泡插, 					-- 选择、冒泡、插入(选一跟儿大炮,插ta一下 -_-)
快归堆希统计基, 		--快速、归并、堆排序、希尔、桶排序、计数、基数(做统计的基友,快归西了,就入土堆)
恩方恩老恩一三, 		--“恩方”是“选泡插”的时间复杂度,谐音n的平方,“恩老恩”是“快归堆”的n*log2(n),“恩一三”是“希尔”的n^1.3
对恩加K恩乘K, 			--剩余的“统计基”中,“对”表示前面的一对,即“统计(桶、计数)”的时间复杂度是n+k,最后一个就是n*k
不稳稳稳不稳稳, 		-- “选泡插”的稳定性是不稳、稳、稳,“不稳稳”表示“快归”的稳定性
不稳不稳稳稳稳! 		-- “不稳不稳”是紧接着的“堆希”,其余全是稳定的“统计基”

时间复杂度函数对比图:
各种时间复杂度函数对比图

附上绘制时间复杂度函数对比的python代码:

# encoding: utf-8
import numpy as np
import pylab as pl
import matplotlib.font_manager as fm
import matplotlib

n = np.arange(0,1000,1) # “数据量大小”的数组:从0到1000,按1递增

pl.plot(n, n ** 2, label='$n^2$')
pl.plot(n, n * np.log2(n), label='$n * log2(n)$')
pl.plot(n, n ** 1.3, label='$n^{1.3}$')
pl.plot(n, n, label='$n$')
# pl.plot(n, n+k, label='$n$')

pl.xlim(0,1000) # 限定x轴的数值范围
pl.ylim(0,1000)
pl.legend(loc='best') # 图例摆放位置,可选值: best right center left lower upper
pl.xlabel(u'数据量大小')
pl.ylabel(u'时间复杂度')
pl.title(u'各种时间复杂度函数对比',size=18)
pl.show()

# ref: https://www.runoob.com/w3cnote/matplotlib-tutorial.html

猜你喜欢

转载自blog.csdn.net/booynal/article/details/125589386