我正在尝试在c ++中创建一个排序函数,使用Heap排序对链接列表对象进行排序,但我不知道如何开始。任何人都可以告诉我如何做到这一点?我甚至不确定如何对链接列表进行排序
答案 0 :(得分:3)
Heapsort的工作原理是从数据中构建heap。只有当每个元素都有random-access时,堆才有效。
第一步是创建一个指向列表对象的指针数组,这样就可以对数组执行常规的堆排序。
最后一步是将指针数组转换回链接列表。
链接列表的更好排序方法是insertion sort - 这不仅仅是因为您可以将排序作为链接列表实现的insert()
函数的一部分来执行。
答案 1 :(得分:0)
我必须同意sarnolds的回答。由于多种原因堆起设置链表是非常低效的,但首先是它们应该在初始放置时进行排序。也就是说,如果我要尝试,我会创建一个ArrayList<T> links
加载所有链接到它。然后你可以抓住它并对它们进行排序。一旦完成,只需从thr head开始重新加载链表。
答案 2 :(得分:0)
HeapSort有两个原因 - 左
1-这是一个就地算法。
2- O(nlogn)的时间复杂度
O(nlogn)是因为数组的随机访问性质,但是如果你使用链表那么你就不会获得数组的随机访问优势。 因此,时间复杂度将变为O(n ^ 2)。这对排序不利。
我建议你使用合并排序算法作为链表。