对于排序算法,相信你一定不陌生吧!如我们常见的几大经典排序:
冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等等。
这些排序算法中,性能、内存消耗各有优劣,同时也各有各的适用场景,而我们也不能仅仅从时间复杂度和空间复杂度的优劣去评断一个排序算法的好与坏,比如冒泡排序和插入排序,两者的时间复杂度均是O(n²),空间复杂度也都是O(1),但是插入排序却更常用,而且在很多实际场景中,执行效率更高,至于原因,你可以思考一下,此文暂不做讨论。
而排序算法中,除了时间复杂度和空间复杂度,还有着一个我们比较常关注的性质:稳定性。
我们这里简单描述一下什么是排序算法的稳定性:
对于某一种排序算法,如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序保持不变,那么就说这个排序算法是稳定的。
而上面所提到的几种排序算法中,冒泡排序、插入排序、归并排序属于稳定排序,选择排序、快速排序、堆排序属于不稳定排序。
简单举个例子:
假设对数组[3, 2, 2, 5, 1, 4
]进行递增排序,数组中有两个元素是相等的即2
,为方便标识,我们先用2