这三个算法的理论时间复杂度都是nlogn,但是区别还是很大的。
这三个算法里,实际效率最低的是堆排序,因为在每次调整大根堆的时候,都把底层元素交换到了根,然后再调整,而底层元素又不可能大于原根元素的两个孩子节点,因此非等概率调整,做了很多次无效交换,因此实际效率最低。
归并排序时间效率最高,并且稳定,因为归并排序每次都把序列二等分,做等概率划分,最后继续划分,这样就能达到最优划分策略,即logn次划分,每个元素最多进行logn次比较,n个元素也就是nlogn,并且在合并的时候不破坏现有顺序,因此是稳定排序,但由于借助了logn个递归栈和n个临时存储空间,因此他的可适用性反而不如快排。
快排效率上是不如归并的,而且不稳定,但是思想和归并一样,都是对序列不断做划分,然后排序,划分策略未必就是最优划分策略,但是可以让他接近最优划分策略,这就涉及到了一个选择枢纽元的问题,比较常见的方法是用三数中值法,并且由于是就地排序,不许靠考虑额外空间开销,因此快排是综合最好的排序算法。