Двоичный поиск. Без прямого сравнения - C#

Узнай цену своей работы

Формулировка задачи:

Помогите разобраться. Написал программу, в которой присутствует реализация алгоритма двоичного поиска . Поиск идёт без прямого сравнения ключа и элемента массива. Дано: текстовый файл - students.txt Тип: <Фамилия> <Имя> <Дата рождения> <Возраст>. 1) Объявляю структуру с полями такими, как в файле. Успешно заношу всю информацию в структуру. 2) Написал бинарный поиск с аргументами (массив,левая,правая,ключ) 3) И когда пытаюсь внутри программы получить middle из функции , пишет нет перегрузки . Проблема в первом аргументе. Помогите переделать! Пожалуйста. Код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace BinSearch_1_
  6. {
  7. class Program
  8. {
  9. public static int BinSearch(string[] arr, int left, int right, string key)
  10. {
  11. int m = 0;
  12. while (true)
  13. {
  14. m = (left + right) / 2;
  15. if (arr[m].CompareTo(key) > 0) right = m - 1;
  16. else if (arr[m].CompareTo(key) < 0) left = m + 1;
  17. else
  18. return m;
  19. if (left > right)
  20. return -1;
  21. }
  22. }
  23. struct Infor
  24. {
  25. public string Family;
  26. public string Name;
  27. public string Year;
  28. public string Age;
  29. public void Info()
  30. {
  31. Console.WriteLine("Информация о студенте :{0} {1} год рождения {2} ,возраст {3}", Family, Name, Year, Age);
  32. }
  33. }
  34. static void Main(string[] args)
  35. {
  36. string[] fileinfo = System.IO.File.ReadAllLines("students.txt", Encoding.GetEncoding(1251));
  37. Infor[] info = new Infor[fileinfo.Length];
  38. string[] words;
  39. for (int i = 0; i < fileinfo.Length; i++)
  40. {
  41. words = fileinfo[i].Split(' ');
  42. info[i].Family = words[0];
  43. info[i].Name = words[1];
  44. info[i].Year = words[2];
  45. info[i].Age = words[3];
  46.  
  47. }
  48. foreach (Infor s in info)
  49. {
  50. s.Info();
  51. }
  52. Console.WriteLine("------------------------------------------------------------------------------------");
  53. Console.Write("Ищем студента с фамилией = "); string x = Console.ReadLine();
  54. int left = 0;
  55. int right = info.Length - 1;
  56. int k = BinSearch(info[].Family,left,right,x);
  57. }
  58. }
  59. }

Решение задачи: «Двоичный поиск. Без прямого сравнения»

textual
Листинг программы
  1. string[] familys = info.Select(inf=>inf.Family).ToArray(); //массив фамилий
  2. int k = BinSearch(familys, left, right, x);

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы