堆排序算法
将要排序的元素按照一定的方法排列成一个堆,从小到大的顺序的话,则最小值为根节点,子节点总比根节点要小。调整节点的时候,初次调整应该从叶子结点开始往根节点调整,经过一次筛选后,形成小根堆,然后输出根节点即为最小值,然后将根节点与最后一个结点交换,再将总的节点数减一(相当于抛弃掉已输出的结点),此时左右子树依旧满足堆的条件,此时只需要从根节点开始进行调整即可,堆排序算法是一种不稳定的算法
最好情况:O(nlogn)
最坏:O(nlogn)
平均:O(nlogn)
Shell排序(希尔排序)
相当于插入排序的进阶版。插入排序在数列小且比较有序的情况下会更有效率,基于这个原则,希尔排序即是把一个待排序的数组,按照一定的步长分为多组,然后分组进行插入排序,然后步长减半,再次进行插入排序,直到步长为一,对整体进行插入排序。这样的话,每次进行插入排序的数组就会很小,且随着步长的减小,整个数组的有序程度又会增加,所以相当于改进的插入排序。Shell排序是一种不稳定的排序算法
最好情况:O(n)
最坏:O(n^2)
平均:不确定
归并算法
采用一种分治的思想,先把一个大的序列进行分组,n个元素分成n组,然后再两两归并,变成n/2组,依次类推,一直到归并成两组(这个过程叫做一趟归并),最后再两组合成一组,完成排序。归并算法是一种稳定的排序算法。
具体归并过程和归并中途排序算法见以下链接,感觉非常详细啊https://blog.csdn.net/k_koris/article/details/80508543
最好情况:O(nlogn)
最坏:O(nlogn)
平均:O(nlogn)