对于时间复杂度来讲,快速排序的速度比较快。算法
通常系统级别的排序都是使用快速排序。对于有可能出现大量重复元素的状况,咱们能够使用三路的快速排序。函数
归并排序必须开辟额外的空间完成归并的过程,才能完成归并排序。性能
快速排序虽然是在原地完成的排序,但它仍然须要log2n个额外空间。spa
这是由于咱们在使用递归的方式来实现快速排序,须要分红log2n层,相应地有log2n层栈空间来保存每一次递归时的临时变量,以供递归返回时继续使用。code
一样地,归并也是用递归来实现的,因此它的额外空间应该是O(n+log2n),只不过n要比log2n大得多,因此就咱们只关注它的额外空间是O(n)级别的。blog
排序算法的稳定性 Stable:对于相等的元素,在排序后,原来靠前的元素依然靠前。相等元素的相对位置没有发生改变。排序
一些稳定的算法若是实现很差的话依然可能会实现成不稳定的程序。递归
同时咱们还能够使用自定义比较函数,让排序算法不存在稳定性的问题。(其实也就是多比较了一下,相应的会有一些性能损耗)table
例如:(在C++中)class
bool operator<(const Student& otherStudent){ return score != otherStudent.score ? score > otherStudent.score : name < otherStudent.name;
在上表中,咱们一般在一个系统级别的排序问题中选择一个稳定的排序算法时,选择归并排序。