我想知道是否有人曾经使用链表进行堆排序,如果他们可以提供代码。我已经能够使用数组进行堆排序,但尝试在链表中进行排序似乎不切实际,而且在你知道的地方很痛苦。我必须为我正在做的项目实现链接列表,任何帮助将不胜感激。
我也用C。
答案是“你不想在链表上实现堆排序”。
堆排序是一种很好的排序算法,因为它O(n log n)
并且它就位。然而,当你有一个链表时,堆排序就不再是O(n log n)
因为它依赖于对数组的随机访问,而链表中没有这种访问。所以你要么失去你的就地属性(通过需要定义一个树状结构是O(n)
空间)。或者你需要不需要它们,但请记住链接列表是O(n)
用于会员查找。这使得运行时复杂性达到类似的程度O(n^2 log n)
这比冒泡排序更糟糕。
只需使用归并排序即可。你已经拥有了O(n)
内存开销要求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)