查找排序等算法一览
算法 | 平均时间 | 最差时间 | 最好时间 | 稳定度 | 空间 | 备注 | 思想 |
---|---|---|---|---|---|---|---|
插入 | O(n2) | O(n2) | O(n) | 稳定 | O(1) | 大部分已排序时较好 | |
希尔 | O(nlogn) | O(ns)[s属于(1,2)] | O(n) | 不稳定 | O(1) | s是所选分组 | |
冒泡 | O(n2) | O(n2) | O(n) | 稳定 | O(1) | n小时较好 | |
快速 | O(nlogn) | O(n2) | O(nlogn) | 不稳定 | O(nlogn) | n大时较好 | 分治法 |
交换 | O(n2) | O(n2) | O(n) | 不稳定 | O(1) | n小时较好 | |
选择 | O(n2) | O(n2) | O(n2) | 不稳定 | O(1) | n小时较好 | |
堆 | O(nlogn) | O(nlogn) | O(nlogn) | 不稳定 | O(1) | n大时较好 | |
归并 | O(nlogn) | O(nlogn)) | O(nlogn)) | 稳定 | O(n) | n大时较好 | 分治法 |
基数 | O(d(r+n)) | O(d(r+n)) | O(d(r+nd)) | 稳定 | O(n) | B是真数(0-9),R是基数(个十百) | |
傅里叶变换 | 分治法 | ||||||
最长公共子序列 | 动态规划 | ||||||
克鲁斯卡尔 | O(eloge) | 最小生成树,e为边数目 | 贪心法 | ||||
普里姆 | O(n2) | 最小生成树 | 贪心法 | ||||
迪杰斯特拉 | O(n2) | 点的最短路径 | 动态规划 | ||||
佛洛依德 | O(n3) | 点对的最短路径 | 动态规划 | ||||
拓扑排序 | O(n+e) | ||||||
关键路径 | O(n+e) | ||||||
辗转相除法 | O(logn) | 最大公约数,gcd(a,b)= gcd(b,a mod b) |
口诀:
(1)快希以log2n入堆:快速、希尔、堆排序不稳定
(2)快希选一堆不稳定:快速、希尔、选择、堆排序不稳定
(3)比较次数和初始化无关的:选堆鸡和龟过年关:选择、堆、基数排序、归并排序无关
(4)快速排序最均衡,但是有序时最坏
查找算法
查找:顺序查找
查找:折半查找和差值法
查找:斐波那契查找
查找:位图法
排序算法
插入类
选择类
交换类
归并类
索引
线性
外排序
目录: