排序总结

    备注 最好时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性
插入排序 直接插入排序 将一个元素插入到另一有序的序列中 有序,只需要比较,O(n) O(n2) O(n2) O(1)
折半插入排序 有序的,顺序存储,比较的次数可以减少,但是插入的次数没有减少  一个元素折半查找是 O(log2n),所以比较时间复杂度是O(nlog2n);最终是O(n2)    
希尔排序  缩小增量排序;刚开始是组内元素少,后来全局有序的情况下直接插入排序效率比较高;只适合顺序存储        O(1)  否
交换排序 冒泡排序  每趟确定一个元素,如果该趟没有交换元素,结束  有序,只进行比较,O(n)  O(n2)  O(n2)  O(1)  是
快速排序

 pivot,每趟确定一个元素到最终位置

优化:1)pivot的选择头中尾,取这三个元素的平均值

    2)规模较小时候,不再使用递归,而是用直接插入排序

   O(nlog2n)  有序或者逆序,O(n2)  需要一个栈,平均是O(log2N)  否
选择排序 简单选择排序  每次选择最小的那个   O(n2)   O(n2)   O(n2)   O(1)  否
堆排序  构造初始堆    O(nlog2n)     O(1)   否
  归并排序  两两归并    O(nlog2n)  

两个有序表合成一个有序表。 

O(n),合并的过程中用了辅助数组

 
posted @ 2020-04-27 17:24  天凉好个秋秋  阅读(104)  评论(0编辑  收藏  举报