各种查找排序算法比较
算法 | 平均时间 | 最差时间 | 最好时间 | 稳定度 | 空间 | 备注 | 思想 |
插入 | 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) |
转自Cblog->java成长之路