归并排序和快排比较

归并排序核心思想是,将两个有序数组合并成一个有序数组。

快排核心思想是,将一个无序数组分成左边<=x,右边>=x的格式。

递归树

涉及到递归,都可以形象的理解成“树”,单递归就是链表,双递归就是二叉树,多递归就是N叉树,在脑中将递归过程映射为“树”,能更好更快的理解递归过程和递归中某一刻的状态。

归并排序先进行了递归,进入了最后递归树最后一层,每个“小结点”两两合并,逐步往上回弹。

时间复杂度

时间复杂度稳定为O(nlogn),最坏情况也是O(nlogn),快排最坏会退化为O(n^2))。

为什么?

本质还是递归树的形态问题,之所以分治算法会快,就是因为它降低了树的高度,且每一层仍然是O(n)的复杂度,高度为logn,整体复杂度为nlogn。

归并每次选二分之一作为中间点,完好的维护了递归树结构,保证左右两边持平。但是快排在面对有序数组时,如果基准选的不当,最坏导致递归树的一边是没有结点的,这样高度就变高,退化成了链表。

posted @ 2021-11-19 17:55  moon_orange  阅读(138)  评论(0编辑  收藏  举报