几个总结
- 对于小数据量,三个 O ( n 2 ) O(n^2) O(n2) 的 algo足矣 – BubbleSort, InsertionSort,SelectionSort。但是 SelectionSort non-stable, 很少用。BubbleSort 的核心操作 swap 需要三个指令,相比而言,Insertion 的核心操作move只需要一个指令,所以 InsertionSort 比 BubbleSort 更常用。在平时的小代码中,手写的话就写 InsertionSort就好了。
- 对于大数据量,两个 O ( n log n ) O(n\log n) O(nlogn) 的 algo 就更常用了 – MergeSort 和 QuickSort. 二者都是运用了分治思想,都是用递归实现,但是 MergeSort 的 Merge 部分,需要开辟一个临时数组,从而使得 MergeSort 的空间复杂度变成了 O ( n ) O(n) O(n), 不如 Sort-in-place 的QuickSort 的 O ( 1 ) O(1) O(1)复杂度。但是, MergeSort 是stable 的,而 QuickSort 因为 swap来swap去, 是 unstable的. 因此, 如何取舍, 看实际业务需求吧.
Ref
- AI知识点备忘录(包括ML、DL、Python、Pandas等) : 超级棒的cheatcharts