堆排序
基于比较的排序,由于不管之前的输入是否有序,都需要建堆、维护堆,所以复杂度总是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之间的整数。
桶排序
输入的数据符合均匀分布时,可以以线性时间运行。