基于比较排序算法时间下限为O(nlogn),计数排序时间复杂度O(n)。
在待排序列基本有序的情况下,直接插入排序是最佳排序算法;快速排序的效率一般情况下都比较高,但在待排序列基本有序的情况下,时间复杂度接近 O(n2);归并排序效率仅次于快速排序,是稳定排序,经常用于多个有序的数据文件归并成一个有序的数据文件以及求解逆序对数,最好、最坏、平均时间复杂度均为O(nlogn),空间复杂度为O(n);桶排序在数据分布均匀且分区粒度够精细的情况下,其时间复杂度接近于O(n),但空间复杂度将非常大。
一. 选择排序
选择排序(包括堆排序,Heapsort)是不稳定,以一次索引交换代替三次值交换。选择排序的交换操作介于 0 和 (n - 1) 次之间,比较操作为n (n - 1) / 2 次之间,赋值操作介于 0 和 3 (n - 1) 次之间。
算法描述:每一次从待排序的数据元素中选出最小(或最大)的一个元素位置,然后与无序区的首元素进行交换,直到全部待排序的数据元素排完。比如[31,5,8,1,9,2,4,26,7]这个数组包含9个元素,在第一轮排序中需要8次比较才能找到最小值1;但是在8次比较中都只记录较小值的索引,而不必做3次值交换,值交换是在上述步骤完成之后才发生的,且仅一次