具体应用程序将使用此排序方案

时间:2013-03-20 13:55:22

标签: algorithm sorting

我有以下排序方案:

给定包含未排序数据的输入数组:1,5,2,6,9

a)按降序排序,即9,6,5,2,1

b)将当前排序列表的最大值9发送到输出

c)修改一些其余值,即5变为10,1变为3

d)将排序列表的其余部分更新为10,6,3,2

e)从b)重复,直到所有未访问的值都被发送到输出(这些值可能在每次发送后被提升)

有谁知道哪种应用程序或特定问题可以使用此方案?最好的算法是使用两个链表来交换索引而不是插入和删除大量更新的数据?感谢

3 个答案:

答案 0 :(得分:2)

这听起来是某种优先级队列。处理给定时间的最高优先级,从而从队列中删除。其他元素可能会获得优先级更改,因此会在队列中向后移动。

假设列表很大(因此值得考虑性能)并且更新元素的数量与元素总数相比相当小,我建议使用快速排序,其中所有未更改的元素都被视为已排序并按算法规定插入更改的元素。

如果元素与大小相关而不仅仅是数字,则可能与算法无关,您可能希望对引用或指针进行排序而不是实际元素。

答案 1 :(得分:0)

您可以使用优先级队列和其他操作:密钥修改。 它可以用于Dijkstra algorithm的实施。 例如,在Robert Sedgewick的书“Algorithms in C ++ / C / Java”

中描述了具有底层二进制堆的这种数据结构。

答案 2 :(得分:0)

您要找的是Heaphttp://en.wikipedia.org/wiki/Heap_(data_structure)),它在C ++ / STL中的实现为priority_queue,还有函数push_heap,{{ 1}}(http://www.cplusplus.com/reference/algorithm/push_heap/)在数组上工作。

当使用插入/删除/更新的堆复杂性为 O(logN)时,获取最大元素 O(1),因此它最符合您的需要。