在字符串的二进制搜索中应用索引

Apply indexing in binary search for string

我收到无法应用索引的错误,但我不确定如何为 BinarySearch 建立 'bounds'(代数)来查找字符串。很明显

     if (item > N[mid])

无法运行,因为项目是一个字符串。我如何在其中找到项目?:

    public static int BinarySearch(string[] name, string item)
    {

        int min = 0;
        int N = name.Length;
        int max = N - 1;
        do
        {
            int mid = (min + max) / 2;
            if (item > N[mid])
                min = mid + 1;
            else
                max = mid - 1;
            if (name[mid] == item)
                return mid;
            //if (min > max)
            //   break;
        } while (min <= max);
        return -1;
    }

并试图用这样的东西来安抚它

   public static int BinarySearch(string[] name, string searchKeyword)
    {

        int min = 0; //=0
        int N = name.Length;  //.Length
        int max = N - 1;
        int S = searchKeyword.Length;



        do
        {
            int mid = (min + max) / 2;
            if (S > N[mid])
                min = mid + 1;
            else
                max = mid - 1;
            if (name[mid] == S)
                return mid;
            //if (min > max)
            //   break;
        } while (min <= max);
        return -1;
    }

您不能在字符串中使用 > 运算符,因为 C# 不知道说一个字符串比另一个字符串大是什么意思。你按长度,字母顺序比较......?

如果您想按字母顺序对它们进行排序,请改用 String.Compare 方法:

public static int BinarySearch(string[] name, string item)
{

    int min = 0;
    int N = name.Length;
    int max = N - 1;
    do
    {
        int mid = (min + max) / 2;
        if (String.Compare(item, name[mid]) > 0)
            min = mid + 1;
        else
            max = mid - 1;
        if (String.Compare(item, name[mid]) == 0)
            return mid;            //if (min > max)
        //   break;
    } while (min <= max);
    return -1;
}