Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/12: Рейтинг темы: голосов - 12, средняя оценка - 4.75
MariaK
3 / 3 / 2
Регистрация: 10.03.2013
Сообщений: 80
1

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

30.11.2014, 15:43. Просмотров 2164. Ответов 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            int[] d = { 88, 12, 64, 325, 78, 3, 77, 8, 45, 13 };
            int index = 0;
            Console.WriteLine("Изначальный массив: ");
            Array.ForEach(d, x =>
            {
                Console.WriteLine("[{0}]: {1}", index++, x);
            });
            Array.Sort(d);
            Console.WriteLine("Отсортированный массив:");
            index = 0;
            Array.ForEach(d, x =>
            {
                Console.WriteLine("[{0}]: {1}", index++, x);
            });
 
            Array.Sort(d);
            int result = BinarySearch(d, 0, d.Length, 'q');
            Console.WriteLine("Index {0} - Value {1}", result, d[result]);
            Console.ReadLine();
        }
        static int BinarySearch(int[] array, int key, int left, int right)
        {
            int mid = left + (right - left) / 2;
            if (left>=right)
                return -(1+left);
 
            if (array[mid] == key)
                return mid;
 
            else if (array[mid] > key)
                return BinarySearch(array, key, left, mid);
            else
                return BinarySearch(array, key, mid + 1, right);
        }
    }
}
Помогите исправить ошибку. При запуске выдает что выходит за пределы границ.

Добавлено через 11 минут
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            int[] d = { 88, 12, 64, 25, 78, 3, 77, 8, 99 };
            int index = 0;
            Console.WriteLine("Изначальный массив: ");
            Array.ForEach(d, x =>
            {
                Console.WriteLine("[{0}]: {1}", index++, x);
            });
            Array.Sort(d);
            Console.WriteLine("Сортированный массив:");
            index = 0;
            Array.ForEach(d, x =>
            {
                Console.WriteLine("[{0}]: {1}", index++, x);
            });
 
            Array.Sort(d);
            int key = BinarySearch(d, 0, d.Length, 'q');
           
            Console.WriteLine("Индекс {0}: " + Array.IndexOf(d, 77));
            Console.ReadKey(true);
        }
        static int BinarySearch(int[] d, int key, int left, int right)
        {
            int mid = left + (right - left) / 2;
            if (left>=right)
                return -(1+left);
 
            if (d[mid] == key)
                return mid;
 
            else if (d[mid] > key)
                return BinarySearch(d, key, left, mid);
            else
                return BinarySearch(d, key, mid + 1, right);
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2014, 15:43
Ответы с готовыми решениями:

Двоичный поиск в отсортированном массиве
вот у меня есть псевдокод как надо писать двоичный поиск lowerBound = 0...

Поиск элемента в не отсортированном массиве
Здравствуйте. Необходимо написать программу, которая генерирует массив с...

Бинарный поиск в массиве классов
Есть массив студентов.Нужно вызвать встроенный бинарный поиск. static void...

Рекурсия: бинарный поиск в упорядоченном массиве
Найти в упорядоченном массиве заданный элемент методом деления массива пополам...

Бинарный поиск заданного числа в одномерном массиве
Бинарный поиск заданного числа в одномерном массиве

2
XRoy
861 / 711 / 305
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
30.11.2014, 15:53 2
MariaK,
У вас вызов функции
C#
1
int key = BinarySearch(d, 0, d.Length, 'q');
скорее всего должен быть таким
C#
1
int key = BinarySearch(d, 77, 0, d.Length - 1);
0
MariaK
3 / 3 / 2
Регистрация: 10.03.2013
Сообщений: 80
04.12.2014, 02:45  [ТС] 3
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        private static void Main(string[] args)
        {
            int[] d = new int[5]; //задание массива из 5 элемемнтов, которые введены с клавиатуры
            for (int j = 0; j < d.Length; ++j)
            {
                Console.Write("({0}) ", j + 1); //вывод на экран массива
                d[j] = int.Parse(Console.ReadLine());
            }
            Array.Sort(d); //встроенная функция сортировки
            Console.WriteLine("Отсортированный массив: "); //вывод на экран отсортированного массива
            int index = 0;
            Array.ForEach(d, x =>
                {
                    Console.WriteLine("[{0}]: {1}", index++, x);
                });
 
            Console.Write("\nНайти: ");
            int key = int.Parse(Console.ReadLine());
            int i = BinarySearch(d, key,  0, d.Length - 1); //обращение к классу BinarySearch для поиска индекса элемента
            if (i < d.Length)
                Console.WriteLine("Индекс искомого элемента: {0}", i);
            else
                Console.WriteLine("Элемент не найден");
            Console.ReadKey(true);
        }
        static int BinarySearch(int[] d, int key, int left, int right) //бинарный поиск
        {
            int mid = left + (right - left) / 2; //находим середину вычитая из последнего элемента первый и деля на 2
            if (left >= right)//проверка условия, если левая сторона больше правой, то возвращается значение
                return -(1 + left);
 
            if (d[mid] == key) //если оказалось. что середина равна искомому значнию, то возвращается это значение, и поиск завершается
                return mid;
 
            else if (d[mid] > key)//в противном случае если середина больше искомого значения, то возвращаемся к левой части и продолжаем там алгоритм
                return BinarySearch(d, key, left, mid);
            else
                return BinarySearch(d, key, mid + 1, right);// иначе, если середина меньше искомого значения, то продолжаем поиск в правой части, так же деля массив на две части
        }
    }
}
Буду признательна, если поясните каждую строчку кода
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2014, 02:45

Параллельная программа поиска элемента в отсортированном массиве
помогите написать параллельную программу поиска элемента в отсортированном...

Напишите программу бинарного поиска в последовательном отсортированном массиве
Ребята, пожалуйста, помогите мне выполнить следующее задание: Напишите...

Бинарный поиск
Найти в массиве елемент со значением Х с помощью бинарного поиска. Добавлено...


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

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

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