如何分析一个排序算法?
- 算法的执行效率:
最好、最坏、平均时间复杂度(对于同一阶时间复杂度的排序算法性能对比可能会把系数、常数和低阶考虑到)基于比较的排序算法执行的适合会涉及到元素比较大小和元素的移动与交换,所以分析效率的时,比较次数、交换或者移动的次数也可以考虑进去 - 排序算法的内存消耗
原地排序,指空间复杂度是 O(1) 的排序算法。 - 排序算法的稳定性
待排序序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。eg:2 5 6 3 3 7 1;这组数据由两个3,如果经过排序算法后,两个3的亲啊后顺序没有改变,那么这种排序算法叫稳定的排序算法,反之不稳定。为什么还要考虑稳定性?一些稳定的算法代码的实现会更简洁 - 应用场景
- 内排序和外排序
内部排序(一次性可以将所有数据加载到内存中进行排序) 海量数据怎么处理
外部排序: 数据不需要一次加载到内存
几种排序算法的性能分析
常见问题
-
冒泡排序和插入排序的时间复杂度都是O(n^2),为什么插入排序比冒泡排序更加受欢迎?
冒泡排序不论怎么优化,交换次数都是固定的,是原始数据的逆序度。而插入排序是无论怎么优化,元素一定的次数也是原始数据的逆序度。但是从代码层面看,冒泡排序的数据交换要比插入排序的数据移动更加复杂,冒泡需要三个赋值操作,而插入