Бинарный поиск по массиву не корректно работает - 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();
        }
 
 
 
    }
}

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


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

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

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