排序分为内部排序和外部排序,常用的为以下八大内部排序(使用内存)。
稳定性定义:在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即如果相同的记录 ri ,rj 经过排序后ri 仍在rj之前,则被认为是稳定的。
如上图所示,
从稳定性来看,
希尔、快速、直接选择、堆,这四种排序是不稳定的。
从时间复杂度来看,
快速、堆、归并三种排序的时间复杂度较好,均为O(nlogn),虽然快排最坏会达O(nlogn),在实际应用中常常优于其它算法。
从稳定性来看,
希尔、快速、直接选择、堆,这四种排序是不稳定的。
从时间复杂度来看,
快速、堆、归并三种排序的时间复杂度较好,均为O(nlogn),虽然快排最坏会达O(nlogn),在实际应用中常常优于其它算法。
选择、直接插入和冒泡的平均时间复杂度均为0(n^2),但在最好情况下直接插入和冒泡的时间复杂度可达O(n),简单选择排序与序列的初始状态无关。
从空间复杂度来看,
快速排序需要用到栈,平均情况下为O(logn),最坏情况下为O(n),其余算法均为O(1)。
从过程特征看,
冒泡排序,简单选择排序和堆排序在每次遍历后都能确定当前的最大值与最小值,快速排序一次遍历确定一个元素的最终位置。
注:
各排序算法的算法介绍,具体实现及优化请参看本系列其他博文,如果有不对的地方,请多多指教~O(∩_∩)O~