2016-12-17 2 views
1

Я получаю ошибку неспособности применить индексацию, но я не уверен, как установить «границы» (алгебраически) для BinarySearch, чтобы найти строку. Очевидно, чтоПрименить индексирование в двоичном поиске для строки

 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; 
    } 
+1

Любая причина не использовать существующий 'метод BinarySearch'? –

+0

для практики, понимания и умения строить перед перемещением в интерфейс. Я изучаю разные методологии, лежащие в основе алгоритмов, и я думаю, что это заостряет мои навыки в долгосрочной перспективе [надеюсь, :)] – seems

ответ

0

Вы не можете использовать оператор > в строке, потому что 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; 
} 
+0

Я продолжаю получать ошибку «Имя [mid] не существует в текущем контексте». – seems

+0

Там вы идете :) проверьте ответ –

+0

что было просто от меня – seems

Смежные вопросы