Двоичный поиск. Без прямого сравнения - 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);

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


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

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

14   голосов , оценка 3.929 из 5
Похожие ответы