Performance 为什么堆排序是有效的?
我们今天刚在课堂上学习了堆排序,我很困惑它是如何被认为是如此高效的——比如有O(nlogn)Performance 为什么堆排序是有效的?,performance,sorting,heapsort,Performance,Sorting,Heapsort,我们今天刚在课堂上学习了堆排序,我很困惑它是如何被认为是如此高效的——比如有O(nlogn) 它的内存效率不高,因为您必须构建一个表示整个数组的堆并不断修改它 它的计算效率不高,因为每次都必须找到最大值并将其带到根 我可能只是不太了解堆,但这似乎是一种非常迂回的选择排序方法,但不知何故,它被认为更有效。。。为什么会这样 它的内存效率不高,因为必须构建一个表示整个数组的堆 堆排序所基于的“中心技巧”(没有它可能就不相关)是,数组可以在适当的位置进行堆化(这可以在中完成),然后堆一直保持在数组的
- 它的内存效率不高,因为您必须构建一个表示整个数组的堆并不断修改它
- 它的计算效率不高,因为每次都必须找到最大值并将其带到根
没有搜索。可以将任何项放到根目录中,然后“冒泡”以恢复heap属性。最明显的选择是堆中的最后一个项,它很容易移除(它不会在堆中留下“洞”,只会将大小减小1)。它与数组中要放置旧根的值的位置相同,因此无论如何,该项最好不要挡道。您可以添加heapify可以在O(N)中完成。