2013-03-20 16 views
0

我有以下排序情形:什么具体的应用程序将使用该排序方案

鉴于含有未排序的数据的输入阵列: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 repeate)直到所有未访问的值(这些值可能在每次发送后uptated)

发送到输出

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

回答

0

您可以使用优先级队列与其他操作:密钥修改。 它可以用于执行Dijkstra algorithm。 这样的基础二进制堆的数据结构在例如Robert Sedgewick的书'C++/C/Java中的算法'中有描述。

2

这听起来像是某种优先级队列。给定时间的最高优先级会被处理并因此从队列中移除。其他元素可能会得到优先级更改,因此会退回到队列中。

假设列表很大(因此甚至考虑性能是值得的)并且更新元素的数量相对于元素的总数相当小,所以我建议使用快速排序并考虑所有未更改的元素排序并按照算法规定插入更改后的元素。

独立于算法,如果元素是相关的大小,而不只是数字,你可能想排序引用或指针,而不是实际的元素。

相关问题