为什么Array.BinarySearch()给出负数?

wil*_*ill 5 c#

我有一些代码对我没有多大意义.我有一个字符串数组,我正在使用二进制搜索在foreach()循环中计算它们.除了排序之外,我尝试输出时的代码完全相同.我不知道为什么我得到了我得到的结果.我认为它应该只计算数组的值,两次都是相同的.有帮助吗?

码:

using System;
public class Driver {
    public static void Main(string [] args) {
        String [] s = {"Bob", "Jane", "Will", "Bill", "Liz"};

        Console.WriteLine("Before Sorting:\n----------");
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);

        Console.WriteLine("\n\nAfter Sorting:\n----------");
        Array.Sort(s);
        foreach(string item in s) {
            Console.WriteLine("{0}. {1}", Array.BinarySearch(s, item) + 1, item);
        }
        Console.WriteLine("Will is at position {0}", Array.BinarySearch(s, "Will") + 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Before Sorting:
----------
1. Bob
2. Jane
3. Will
0. Bill
-2. Liz
Will is at position 3

After Sorting:
----------
1. Bill
2. Bob
3. Jane
4. Liz
5. Will
Will is at position 5
Run Code Online (Sandbox Code Playgroud)

我确定这是完全愚蠢的事情,但我无法弄清楚.

Cra*_*sta 5

二进制搜索仅适用于已排序的数组.它找不到价值:

如果未找到值且值小于数组中的一个或多个元素,则为负数,它是第一个元素的索引的按位补码,其大于值.如果找不到值且值大于数组中的任何元素,则为负数,它是(最后一个元素的索引加1)的按位补码.