Двоичный поиск. Без прямого сравнения - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д