排序算法的稳定性及其汇总
1.时间复杂度为O(n^2)排序的稳定性:原序列中相同的值,在排好顺序之后,能够保证原来的相同的值相对顺序保持不变。在一个算法中,如果所有相同值,在排完序之后,值的顺序不会被打乱,那么这个算法就是稳定的。如果会被打乱,那么这个排序就不具备稳定性。 如果在相等情况下也进行交换,那么冒泡排序就不是稳定的了。 冒泡排序可以实现为稳定的,插入排序可以实现为稳定的,选择排序不能实现稳定的算法。
2.时间复杂度O(nlogn)算法。归并排序可以做到稳定性,遇到相等的情况下拷贝左边的,保证右边的想等值不会跑到右边就可以做到稳定性。快速排序不能实现稳定性。堆排序做不到稳定性。
3.工程中的综合排序算法。
(1)在工程中,会先判断数组中的值是基础类型(基础类型会用快排)还是对象类型(就需要用到比较器,使用归并排序),但是如果数组很短,不选选择快排,也不会选择归并,会直接用插入排序。
4.有关排序问题的补充:
(1)归并排序的额外空间复杂度可以变成O(1),但是非常难。
5.认识比较器的使用。