1.插入排序
直接插入排序,当关键字已经有序时,需要比较n-1次,不需要移动。平均情况下,时间复杂度为O(n^2)。
折半插入排序,可以减少比较次数,但不能减少移动次数;2-路插入排序,需要n个记录的辅助空间,可以一定程度的减少移动次数。
希尔排序的基本思想是先将整个待排记录序列分割成若干子序列分别进行直接插入排序,待整个序列“基本有序”时,再对全体记录进行一次直接插入排序。
2.交换排序
冒泡排序,当关键字已经有序时,需要比较n-1次,不需要移动。平均情况下,时间复杂度为O(n^2)。
快速排序,通过一趟使一部分关键字比另一部分小。快速排序是平均性能最好的,但是若初始时有序或基本有序,其时间复杂度为O(n^2)。从空间上看,快速排序需要一个栈空间来实现递归。
3.选择排序
简单选择排序,无论初始排列如何,所需比较次数都是(n*(n-1))/2。
树形选择排序从减少比较出发,利用前n-1次比较所得信息。首先对n个记录的关键字进行两两比较,然后在其中n/2个较小者之间再进行两两比较,如此重复,直到选出最小。欲选出次小关键字,仅需将叶子节点中的最小关键字换为“最大值”,然后从该叶子节点开始,比较修改到根的路径上的节点,最后得到的就是次小关键字。它的时间复杂度为O(nlogn)。但是需要的辅助空间较多。
堆排序再次改进,将空间复杂度缩小为O(1)。假设输出堆顶元素后,以堆中最后一个元素代替。此时根节点的左右子树均为堆,则仅需自上向下进行调整即可。这个过程称为“筛选”,从无序序列建堆的过程,就是一个反复“筛选”的过程。堆排序在最坏情况下,其时间复杂度也为O(nlogn),这是其相对于快排的最大优点。
4.归并排序
与快速排序和堆排序相比,归并排序的最大特点是,它是稳定的;最坏情况下,其时间复杂度也为O(nlogn);需要的辅助空间为O(n)。