应用二进制搜索而不是内置函数

时间:2017-05-01 00:52:33

标签: c# search binary linear

我目前有一些代码,我希望添加二进制搜索。目前,我的代码读取文件并使用内置函数搜索值。有没有什么方法可以轻松实现二进制搜索。我有二进制搜索的代码,但我真的不明白它。我理解它的原理但不确定应用。任何帮助将不胜感激。

当前代码:

string fileResponse = "Data1/Region_1.txt";
Console.Write("please enter a word to search for in the file: (Case Sensitive) ");
       string wordResponse = Console.ReadLine();
StreamReader myfile = File.OpenText(fileResponse);

       using (StreamReader myFile = File.OpenText(fileResponse))
       {
           int count = 0; //counts the number of times wordResponse is found.
        int lineNumber = 0;
           while (!myFile.EndOfStream)
           {
               string line = myFile.ReadLine();
                  lineNumber++;
               int position = line.IndexOf(wordResponse);
               if (position != -1)
               {
                   count++;
                   Console.WriteLine("Match #{0} {1}:{2}", count, lineNumber, line);
               }
           }

           if (count == 0)
           {
               Console.WriteLine("your word was not found!");
           }
           else
           {
               Console.WriteLine("Your word was found " + count + " times!");
           }
           Console.ReadLine();
       }

标准二进制搜索我想实现:

 public static object BinarySearchIterative(int[] inputArray, int key, int min, int max)
{
while (min <=max)
{
   int mid = (min + max) / 2;

   if (key == inputArray[mid])
   {
        return ++mid;
   }
   else if (key < inputArray[mid])
   {
       max = mid - 1;
   }
   else
   {
        min = mid + 1;
   }
}
return "0";
}

1 个答案:

答案 0 :(得分:0)

我认为你要找的答案是“不。”

二进制搜索只能在您排序的字段上进行。让我举个例子:

  1. Abraham.Lincoln
  2. George.Washington
  3. John.Adams
  4. Millard Fillmore
  5. Thomas.Jefferson
  6. Zachary.Taylor
  7. ...这些记录按名字排序。所以让我们做一个简单的二元搜索,找到名字'Millard'。从中途开始,阅读'John'。米勒德比那更大,所以名字必须在下半部分。接下来,看看下半部分 - 让我们说它是托马斯杰斐逊。等等,不,太远 - 米勒德介于两者之间。在'John'和'Thomas'之间阅读,你会发现Millard。恭喜!您无需阅读整个文件 - 您可以向上/向下反弹以找到您正在寻找的内容。

    但是现在想象你已经被赋予了一个不同的任务:找到一个名字在其中的'ob' 的总统。所以你尝试二进制搜索,然后你读'约翰'。呃......你走哪条路?向上?下?你不能二元搜索,因为你无法判断是向上还是向下跳过。

    短篇小说是:你只能在字段上进行二进制搜索,即数据的排序(即使这样,你也只能从字段的开头进行二进制搜索。)

    因此,当您要求在文件中搜索单词时,听起来您正在文件中的任何地方中查找单词 - 而不仅仅是已排序的列。在这种情况下,你真的不能使用二进制搜索。