使用.net 3.5框架快速排序

时间:2010-03-05 10:44:43

标签: .net vb.net sorting

在我正在编写的科学应用程序(vb.net)中,我使用存储在树结构中的大量对象集合。每个对象都公开一个LastAccessed属性(datetime),该属性存储算法最后一次访问节点。

我需要找到一种快速查找结构中N个访问最少的对象的方法。

我正在使用这样的算法(伪代码)

dim Olist as new list (of myobject)
....
array.sort(Olist,address of compareByDataReverse)
for index=0 to N-1
   dosomething(Olist.item(index))
end

我确信有更好的方法可以做到这一点,因为列表通常很大(包含超过10 ^ 6个对象)。

感谢
皮耶路易吉

3 个答案:

答案 0 :(得分:2)

您提到您使用树状结构,但是您向我们显示了一个列表。如果你使用一个列表,你确实可以对它进行排序(O(l log(l))然后取O(1)中的最后n个元素。或者只是迭代它并获得(O(l))中的最后n个元素。

然而,您使用树视图。您没有提到您的树是如何实现的。您可以使用LastAccessed日期的关键字创建二进制搜索树。搜索前N个元素也可以非常快速地完成。

或者你可以保留一个索引。只需创建一个树视图,其中包含LastAccessed日期的关键字。插入或删除原始列表中的项目也应更新索引。然后,您可以根据日期快速检索商品的链接。以较慢的插入/移除为代价。

答案 1 :(得分:1)

在最好的情况下,您的代码将使用O(nlogn)执行。您应该从dim Olist as new list (of myobject)开始,然后获取LinkedList并检查您的集合并将值添加到您的列表中,以保持其排序。这将是O(n * m)

答案 2 :(得分:1)

如果您使用Selection sort,那么在 N次迭代之后,首先N个元素将按排序顺序。

注意:但我不确定这是否能完全解决您的问题。