赞
踩
首选时间复杂度是 O(nlogn)
堆排序和快速排序都有比较多的应用,
问题是 快速排序 解决 复杂度恶化
为了避免快速排序里,递归过深而堆栈过小,导致堆栈溢出,我们有两种解决办法:第一种是限制递归深度。一旦递归过深,超过了我们事先设定的阈值,就停止递归。第二种是通过在堆上模拟实现一个函数调用栈,手动模拟递归压栈、出栈的过程,这样就没有了系统栈大小的限制。
Timsort的合并算法非常巧妙:
1 找出左分区最后一个元素(最大)及在右分区的位置
2 找出右分区第一个元素(最小)及在左分区的位置
3 仅对这两个位置之间的元素进行合并,之外的元素本身就是有序的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。