Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Lord007
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
1

Бинарный поиск по массиву не корректно работает

06.02.2017, 10:40. Просмотров 234. Ответов 2
Метки нет (Все метки)

Почему мой бинарный поиск массива не корректно работает?

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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();
        }
 
 
 
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2017, 10:40
Ответы с готовыми решениями:

Поиск по массиву
Здравствуйте! Я задался вопросом. У меня есть массив, в котором записаны номера...

Поиск по массиву
Имеется массив.int ranks = new int { 0, 100, 500, 1500, 3700, 7100, 12300,...

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

Стандартный поиск по массиву
Какой алгоритм использует стандартный поиск чисел по массиву в С#?

Поиск совпадений по массиву
В строковом массиве находятся строки слова. string={&quot;hi&quot;, &quot;here&quot;, &quot;your&quot;,...

2
kolorotur
Эксперт .NET
10499 / 8685 / 2161
Регистрация: 17.09.2011
Сообщений: 14,905
Завершенные тесты: 1
06.02.2017, 11:13 2
Lord007, вы сортируете по Vp, а поиск производите по Vo.
То есть по факту пытаетесь провести двоичный поиск в неотсортированном массиве.
1
Lord007
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 156
06.02.2017, 12:12  [ТС] 3
kolorotur, да, Вы правы. Плюс к этому было еще пару ошибок с индексами.

Добавлено через 17 минут
kolorotur, пробовал этот бинарный поиск вынести в отдельную функцию класса, но возникли ошибки с описанием параметров у меня. Как правильно подать массив структуры в эту функцию?

Пробовал так, но получил ошибку
Ошибка CS1503 Аргумент 1: не удается преобразовать из "Project11.Bus" в "Project11.Bus[]". Project11

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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();
        }
 
 
 
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2017, 12:12

Линейный поиск по массиву
using System; using System.Collections.Generic; using System.Linq; using...

Поиск по массиву и проверка значений
Всем привет! Меня зовут Святослав, и мне 28 лет. Захотел учиться...

Поиск по двумерному массиву list<>
Всем доброго дня. Замучался с массивом. Нужно организовать поиск но я не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru