我正在开发项目,我希望使用堆排序对数据进行排序,因为最糟糕的情况对我的项目非常重要。我知道快速排序在平均情况下更快,但我不能在我的项目中使用它因为o(n ^ 2)最坏的情况。
我想知道是否有任何缓存高效的堆可用于堆排序,空间复杂度较低?我想知道缓存效率对堆排序和快速排序的影响?它对堆排序有多大影响?它的影响是太大还是微不足道?
答案 0 :(得分:1)
Funnel heaps是对普通老堆的替代缓存。我不知道他们有多少帮助,我从来没有对他们进行基准测试。
4-ary堆,它是d-ary heaps的一种形式,不是缓存无关,甚至没有调整到任何特定的缓存大小,但总算比2-ary(即二进制)堆好一点,因为它们比较浅。如果你继续增加d
,那么效果就不会有效,4或8很好,但是对于更高的d
,每个级别的开销会占用,并且比具有更少级别的节省更重要。< / p>
堆排序的空间复杂性实际上并不是可以改进的,因为它已经是O(1),假设您使用标准技术来就地堆积输入,然后将结果放在那里。
至于好老的heapsort vs quicksort,这里是different take on it,interesting response。 TL; DR:不要只重复旧的“quicksort beats heapsort”,它更复杂。