堆排序

基于比较的排序,由于不管之前的输入是否有序,都需要建堆、维护堆,所以复杂度总是O(nlgn),不具有稳定性。

冒泡排序

基于比较的排序,时间复杂度为O(n2)。优点是具有稳定性,原来在前面的还在前面。

 

插入排序

最好情况是输入就是按照升序排列,需要n-1次比较;最坏情况就是输入按照降序排列,需要进行n(n-1)/2次比较。平均时间复杂度是O(n2)。因此非常不适合大数据量的排序。

选择排序

 

快速排序

算法复杂度是O(nlgn)。如果选择pivot总是选择最大或者最小的元素,会导致最坏情况,运行时间为O(n2),为了避免出现这种情况,可以最输入数据进行随机化,从而避免最快情况。

基数排序

给定n个d位数,每一个数位都可以取k种可能的值,基数排序能以O(d(n+k))的时间进行排序。

计数排序

假设n个输入元素中的每一个都是介于0和k之间的整数。

桶排序

输入的数据符合均匀分布时,可以以线性时间运行。