快排适用于大量无序数据
比较次数:画了n个括号,每一次画括号都要选出一个最大值
移动次数:已经排序号的元素是不需要移动的,只需要在选择出极值之后,将极值,与括号头的元素互换位置
但是希尔排序在最坏情况下的时间复杂度也是O(N^2)
堆排序,平均时间复杂度和最坏时间复杂度都是O(N*logN)
二叉树中,叶子节点数一定等于分支节点数+1
如果节点数为n,则n/2向下取整及之前都是分支节点(从1开始),n/2向下取整+1以及之后为叶子节点
建立堆的过程:先不做任何改变,以层序遍历的方式建立二叉树,然后从第一个分支节点开始向前调整,每次调整只负责将所涉及到的结点为根节点的子树调整完毕,向下调整,一直推到底,但是不向上推
如果是大根堆,就与大的调整,如果是小根堆,就与小的调整
堆排序:O(1)
快速分类(调用栈):O(logN)
归并分类:O(N)
平均时间复杂度为O(N*logN)的算法:归并排序,堆排序,快速排序
最坏情况下的时间复杂度能达到的最好下界,等同于,最好的最坏时间复杂度:
冒泡排序,插入排序(直接插入,折半插入排序),选择排序,希尔排序,最坏情况下的时间复杂度都是O(N^2);
堆排序,归并排序,最坏情况下的时间复杂度为O(N*logN)
基数排序(P(N+B)) P为趟数,也就是数字的位数,B为基数,十进制就是10
组与组之间相对有序,只需要将各个组分别排序即可.
O(k*log(k)) * (n/k) = O(n * log k)