1、在数据完全无序的情况下,哪种最快?
2、在大部分数据有序的情况下,哪种最快?
当N很小时,快速排序慢,归并排序快
当N很大时,并且有序程度高时,快速排序最快
当N很大时,并且有序程序低时,堆排序最快
堆排序
- 特性:完全二叉树
- 不稳定
大顶堆:最大值就是堆顶的根节点
arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]
小顶堆:最小值就是堆顶的根节点
arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]
归并排序
- O(n log n)
- 特性:完全二叉树;分治法
- 稳定排序
补:timsort : 结合归并和插入排序的算法
在java的Arrays.sort()源码中有使用到