我正忙着准备MCTS 70-536考试,根据考试书(Microsoft Press - .NET Framework - 应用程序开发基础自学训练套件第2版),此代码示例:
ArrayList al = new ArrayList();
al.AddRange(new string[] { "Hello", "world", "this", "is", "a", "test" });
Console.WriteLine(al.BinarySearch("this"));
将值'2'输出到控制台,因为项'this'位于索引2.同意这是我运行该代码时得到的输出。
但是如果我跑
Console.WriteLine(al.BinarySearch("world"));
我希望在控制台中获得值1,因为'world'将在索引1处,但是我得到值-7?
有人可以解释一下这是如何运作的吗?
由于
答案 0 :(得分:11)
您正在执行二进制搜索的数组未排序。这是BinarySearch运行的要求。
没有排序,混淆搜索算法,并让它认为“世界”应该在第7位,但它不在数组中:结果是-7。
答案 1 :(得分:3)
直接从ArrayList.BinarySearch(http://msdn.microsoft.com/en-us/library/5tzt7yz3%28VS.85%29.aspx)
的MSDN文档中获取value参数和每个元素 的ArrayList必须实现 IComparable接口,使用 比较。的元素 ArrayList必须已经排序 根据排序增加价值 IComparable定义的订单 实施;否则,结果 可能不正确。
答案 2 :(得分:1)
问题已经回答,但添加了这个以供参考。
BinarySearch将使用排序算法查找项目。在您的示例中,默认排序是按字母顺序排列的,因此“world”应该是last,因此为7。
您将看到BinarySearch的上传器,它接受IComparer对象。不提供这个提供默认的字母顺序。
但如果您按照本书的建议实现了“reverseSort”方法,那么您需要将BinarySearch函数传递给“reverseSort”对象。
喜欢这个;
Console.WriteLine(al.BinarySearch(al, new reverseSort()));
同样正如我发现如果你实现“reverseSort”类并执行一个console.writeline来进行比较,它的结果并不像我期望的那样。我花了一点时间试图找出算法是什么。
答案 3 :(得分:0)
基于零的价值指数 如果找到值,则排序ArrayList; 否则,负数,即 指数的按位补码 下一个大于的元素 值,或者,如果没有更大 元素,按位的补码 计数。
请注意已排序字。