Двоичный поиск. Без прямого сравнения - C#
Формулировка задачи:
Помогите разобраться. Написал программу, в которой присутствует реализация алгоритма двоичного поиска . Поиск идёт без прямого сравнения ключа и элемента массива.
Дано: текстовый файл - students.txt Тип: <Фамилия> <Имя> <Дата рождения> <Возраст>.
1) Объявляю структуру с полями такими, как в файле. Успешно заношу всю информацию в структуру.
2) Написал бинарный поиск с аргументами (массив,левая,правая,ключ)
3) И когда пытаюсь внутри программы получить middle из функции , пишет нет перегрузки . Проблема в первом аргументе.
Помогите переделать! Пожалуйста.
Код:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BinSearch_1_ { class Program { public static int BinSearch(string[] arr, int left, int right, string key) { int m = 0; while (true) { m = (left + right) / 2; if (arr[m].CompareTo(key) > 0) right = m - 1; else if (arr[m].CompareTo(key) < 0) left = m + 1; else return m; if (left > right) return -1; } } struct Infor { public string Family; public string Name; public string Year; public string Age; public void Info() { Console.WriteLine("Информация о студенте :{0} {1} год рождения {2} ,возраст {3}", Family, Name, Year, Age); } } static void Main(string[] args) { string[] fileinfo = System.IO.File.ReadAllLines("students.txt", Encoding.GetEncoding(1251)); Infor[] info = new Infor[fileinfo.Length]; string[] words; for (int i = 0; i < fileinfo.Length; i++) { words = fileinfo[i].Split(' '); info[i].Family = words[0]; info[i].Name = words[1]; info[i].Year = words[2]; info[i].Age = words[3]; } foreach (Infor s in info) { s.Info(); } Console.WriteLine("------------------------------------------------------------------------------------"); Console.Write("Ищем студента с фамилией = "); string x = Console.ReadLine(); int left = 0; int right = info.Length - 1; int k = BinSearch(info[].Family,left,right,x); } } }
Решение задачи: «Двоичный поиск. Без прямого сравнения»
textual
Листинг программы
string[] familys = info.Select(inf=>inf.Family).ToArray(); //массив фамилий int k = BinSearch(familys, left, right, x);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д