ListBox.FindString什么是最坏的情况运行时? O(n),O(n log n),O(1)?

时间:2009-03-11 17:29:58

标签: winapi runtime

出于好奇,ListBox.FindString(string)的最坏情况运行时是什么? MSDN没有在其API文档中说明这一点。

我强烈怀疑它是O(n),我有一个排序列表,O(log n)或O(1)会很好,有没有办法改变FindString在运行时使用哪种排序算法? / p>

4 个答案:

答案 0 :(得分:1)

如果ListBox中有足够的字符串使得FindString()的工作方式很重要,那么您需要查看另一种存储字符串的方法。

答案 1 :(得分:1)

无论将列表框中的大量项目放到重要的位置是否是一个好主意(对于用户来说可能很麻烦,具体取决于您的实现。),我会猜测O. (n)因为我认为它的部分匹配不区分大小写。

答案 2 :(得分:1)

实际上,可以查看该方法的作用,因为Microsoft通过“Microsoft参考源代码”(clicky)提供了.net基类源代码 - 您可以进入VS中的BCL代码(也有很多BCL的东西可以通过Rotor,.net的开源实现,但是WinForms代码不可用于IIRC)。

检查代码(我不想在此处粘贴,以防它违反MS的许可证),很明显该方法 O(n)最坏情况。

基本上,该方法循环遍历列表中的每个项目,如果到达底部,则移回列表顶部(通过狡猾地使用永远可爱的mod(%)运算符和计数器)。显然,在最坏的情况下(即搜索项目不在列表中)是O(n),它必须迭代列表的每个成员。

答案 3 :(得分:0)

  

“查找ListBox中的第一项   以指定的开头   字符串“

从列表的开头看起来就像一个线性搜索,但没有办法确定。

您无法更改ListBox使用的算法,但您可以扩展ListBox并让扩展类按您的意愿执行。 :d