Бинарный поиск по массиву не корректно работает - C#
Формулировка задачи:
Почему мой бинарный поиск массива не корректно работает?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Project11 { struct Bus { public int N; public string Pn; public double Vo; public double Vp; public Bus(int n, string pn, double vo, double vp) { this.N = n; this.Pn = pn; this.Vo = vo; this.Vp = vp; } public void Show() { Console.WriteLine("№ рейса " + this.N); Console.WriteLine("Пункт назначения: " + this.Pn); Console.WriteLine("Время отправления: " + this.Vo); Console.WriteLine("Время прибытия : " + this.Vp); } public void Write() { string fileName = "bus.txt"; FileStream aFile = new FileStream(fileName, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(aFile); aFile.Seek(0, SeekOrigin.End); sw.WriteLine("№ рейса " + this.N); sw.WriteLine("Пункт назначения: " + this.Pn); sw.WriteLine("Время отправления: " + this.Vo); sw.WriteLine("Время прибытия : " + this.Vp); sw.WriteLine(); sw.Close(); Console.WriteLine(); Console.WriteLine("Данные записаны в файл"); } } class PR11 { public static void Main() { string pnb; double qvp = 8.15; int k = 4; Bus[] bus = new Bus[k]; bus[0] = new Bus(122, "Paris", 14.00, 14.50); bus[1] = new Bus(12, "Vena", 16.00, 17.35); bus[2] = new Bus(121, "Roma", 7.20, 8.15); bus[3] = new Bus(356, "London", 13.00, 17.30); bus[3] = new Bus(356, "Praha", 10.00, 21.30); Console.Read(); Console.Read(); Console.WriteLine("Сортировка по времени прибытия......"); Bus tmp = new Bus(); for (int i = 0; i < bus.Length; i++) { for (int j = i + 1; j < bus.Length; j++) { if (bus[i].Vp > bus[j].Vp) //По возростанию { tmp = bus[i]; bus[i] = bus[j]; bus[j] = tmp; } } } Console.WriteLine(); Console.WriteLine("Поиск..."); double xtime = 13.00; int z = 0; int g = k - 1; int m; while (z < g) { m = (z + g) / 2; if (xtime > bus[m].Vo) z = m + 1; else g = m; } if (bus[z].Vo == xtime) { bus[z].Show(); Console.WriteLine("--------------------------"); } else Console.WriteLine("такого рейса не существует"); Console.WriteLine("--------------------------"); Console.Read(); Console.Read(); } } }
Решение задачи: «Бинарный поиск по массиву не корректно работает»
textual
Листинг программы
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace Project11 { struct Bus { public int N; public string Pn; public double Vo; public double Vp; public Bus(int n, string pn, double vo, double vp) { this.N = n; this.Pn = pn; this.Vo = vo; this.Vp = vp; } public void Show() { Console.WriteLine("№ рейса " + this.N); Console.WriteLine("Пункт назначения: " + this.Pn); Console.WriteLine("Время отправления: " + this.Vo); Console.WriteLine("Время прибытия : " + this.Vp); } public void Write() { string fileName = "bus.txt"; FileStream aFile = new FileStream(fileName, FileMode.OpenOrCreate); StreamWriter sw = new StreamWriter(aFile); aFile.Seek(0, SeekOrigin.End); sw.WriteLine("№ рейса " + this.N); sw.WriteLine("Пункт назначения: " + this.Pn); sw.WriteLine("Время отправления: " + this.Vo); sw.WriteLine("Время прибытия : " + this.Vp); sw.WriteLine(); sw.Close(); Console.WriteLine(); Console.WriteLine("Данные записаны в файл"); } public void Search(Bus[] arr, double _xtime, int k) { double xtime = _xtime; int z = 0; int g = k - 1; int m; while (z < g) { m = (z + g) / 2; if (xtime > arr[m].Vo) z = m + 1; else g = m; } if (arr[z].Vo == xtime) { arr[z].Show(); Console.WriteLine("--------------------------"); } else { Console.WriteLine("такого рейса не существует"); Console.WriteLine("--------------------------"); } } } class PR11 { public static void Main() { int k = 5; Bus[] bus = new Bus[k]; bus[0] = new Bus(122, "Paris", 14.00, 14.50); bus[1] = new Bus(12, "Vena", 16.00, 17.35); bus[2] = new Bus(121, "Roma", 7.20, 8.15); bus[3] = new Bus(356, "London", 13.00, 17.30); bus[4] = new Bus(356, "Praha", 10.00, 21.30); Console.Read(); Console.Read(); Console.WriteLine("Сортировка по времени отправки......"); Bus tmp = new Bus(); for (int i = 0; i < bus.Length; i++) { for (int j = i + 1; j < bus.Length; j++) { if (bus[i].Vo > bus[j].Vo) //По возростанию { tmp = bus[i]; bus[i] = bus[j]; bus[j] = tmp; } } } Console.WriteLine(); Console.WriteLine("Поиск..."); Bus.Search(bus[k],14.00,k); Console.Read(); Console.Read(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д