Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 08.04.2021
Сообщений: 41
1

Двоичный поиск места размещения нового элемента в упорядоченном массиве

26.04.2021, 14:14. Показов 3190. Ответов 9

Author24 — интернет-сервис помощи студентам
Всем салют!
Я с указателям первый раз работаю.
Задача:

Функция производит двоичный поиск места размещения нового элемента в упорядоченном массиве и возвращает указа-тель на место включения нового элемента. С помощью функции реализовать сортировку вставками.

-возвращает указа-тель на место включения нового элемента.- чет не особо понимаю , что требуется. Новый элемент в сам массив включить?

Вот мой код :

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
#include "stdafx.h"
#include<iostream>
 
using namespace std;
 
int search(int* array, int len, int n)
{
    ////СОРТИРОВКА ВСТАВКАМИ
    for (int i = 0; i < len; i++) {
        int temp = array[0];
        for (int j = i + 1; j < len; j++) {
            if (array[i] > array[j]) {
                temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    ////ДВОИЧНЫЙ ПОИСК
    int *ptr = 0;
    int l = 0, r = len - 1;
 
 
    while (r > l)
    {
        int mid = (r - l) / 2; // а не (l + r)/2;
        if (n <= array[mid])
            r = mid;
        else
            l = mid + 1;
    }
    //...
    if (array[l] < n)
    {
        int a = l - 1;
        ptr = &a;      
        return *ptr;
    }
}
 
int main()
{
    setlocale(LC_ALL, "rus");
    int size, n;
    cout << "Введите размер массива: ";
    cin >> size;
    cout << "Введите цифру: ";
    cin >> n;
    int* mas = new int[size];
    for (int i = 0; i<size; i++)
        cin >> mas[i];
    cout << "Массив: ";
    search(mas, size, n);
 
    int res = search(mas, size, n);
    for (int i = 0;i<size; i++)
        cout<<"["<<i+1<<"]:" << mas[i] << " ";
    cout << "Элемент должен стоять на позиции между " << res << " и " << res + 1 << " элементом " << endl;
 
    delete[]mas;
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.04.2021, 14:14
Ответы с готовыми решениями:

Функция производит двоичный поиск места размещения нового элемента в упорядоченном массиве и возвращает указатель на мес
Функция производит двоичный поиск места размещения нового элемента в упорядоченном массиве и...

Написать функцию, осуществляющую двоичный поиск нового элемента в упорядоченном массиве
Написать функцию, которая производит двоичный поиск места размещения нового элемента в...

Двоичный поиск в упорядоченном массиве
Дан упорядоченный по неубыванию целочисленный массив и набор чисел ki. Требуется для каждого числа...

Бинарный (двоичный) поиск по алфавиту в упорядоченном массиве структур
Приветствую товарищей-программистов! Есть массив структур StructWords massiv. struct...

9
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
26.04.2021, 16:42 2
Цитата Сообщение от Greek21 Посмотреть сообщение
чет не особо понимаю , что требуется
Напрмер, так:
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
#include <iostream>
#include <iterator>
 
int * search(int * first, int * last, int val)
{
    for (;first != last;)
    {
        int * mid = first + (last - first) / 2;
        if (*mid <= val)
            first = mid + 1;
        else 
            last = mid;
    }
    return first;
}
 
void insertSort(int * first, int * last)
{
    for (int * curr = first; curr != last; ++curr)
    {
        int * place = search(first, curr, *curr);
        for (; place != curr; ++place)
        {
            int temp = *place;
            *place = *curr;
            *curr = temp;
        }
    }
}
 
int main()
{
    int arr[] = {9,2,3,4,5,1,7,6,2,5,4,3,9,8,1};
    insertSort(std::begin(arr), std::end(arr));
    for (int val : arr)
        std::cout << val << ' ';
}
1
2 / 2 / 0
Регистрация: 08.04.2021
Сообщений: 41
26.04.2021, 16:57  [ТС] 3
Спасибо большое , но моя программа как раз таки сортирует и указывает где должен стоять мною введенный элемент. Я не понимаю вот эту часть задания ---возвращает указа-тель на место включения нового элемента---. Может кто объяснить.
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
26.04.2021, 17:02 4
Цитата Сообщение от Greek21 Посмотреть сообщение
но моя программа как раз таки сортирует и указывает где должен стоять мною введенный элемент
Так у вас задача во время сортировки искать место, куда вставлять очередной элемент с помощью функции.
У вас сейчас линейный поиск места вставки во время сортировки и зачем-то двоичный поиск после сортировки для вставки неизвестно чего...
1
2 / 2 / 0
Регистрация: 08.04.2021
Сообщений: 41
26.04.2021, 17:10  [ТС] 5
Т.е. просто сортировка? Я просто понял задание вот так:

Ввожу цифру например : 5
Ввожу массив например: 1 4 7 9 8
Сортирует массив : 1 4 7 8 9 и указывает , что введенный эллемент т.е. -5- должен стоять между 2-ым и 3-ем элементом.
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
26.04.2021, 17:17 6
Цитата Сообщение от Greek21 Посмотреть сообщение
Т.е. просто сортировка?
Да, просто сортировка с "извращением" в виде поиска места для вставки.

Добавлено через 41 секунду
Вот это ключевое:
Цитата Сообщение от Greek21 Посмотреть сообщение
Функция производит двоичный поиск места размещения нового элемента
...
С помощью функции реализовать сортировку вставками.
1
2 / 2 / 0
Регистрация: 08.04.2021
Сообщений: 41
26.04.2021, 17:33  [ТС] 7
Т.е.
Нам дан массив

7 4 1 10 2

идет поиск , доходит до 1 и теперь этот новый элемент он ищет куда вставить - методом вставки , ну и далее с остальными элементами так же.

Мне только не понятно вот еще что , написано в задании --поиск места размещения нового элемента в упорядоченном массиве--. Как он может искать этот элемент в уже упорядоченном массиве( под словом упорядоченном я понимаю 1234...)?
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
26.04.2021, 17:45 8
Лучший ответ Сообщение было отмечено Greek21 как решение

Решение

Greek21, сортировка вставками работает примерно следующим образом:
Условный курсор устанавливается в начало массива и сортируя его перемещается к концу. Этот курсор на каждом этапе разбивает массив на две части: слева - отсортированное, справа - ещё нет. Очередной элемент, на который указывает курсор во время своего путешествия, нужно вставить в левую часть, сохранив её "отсортированность". Место, в которое нужно его вставить и нужно искать с помощью функции поиска(согласно заданию).

В посте №2 я вам показал код, который всё это делает. Он очень простой - попробуйте разобраться.
1
2 / 2 / 0
Регистрация: 08.04.2021
Сообщений: 41
26.04.2021, 17:56  [ТС] 9
Спасибо большое , я теперь понимаю , что от меня требуется!

Добавлено через 7 минут
Спасибо большое , я теперь понимаю , что от меня требуется , но только тогда почему задание не звучит просто как : С помощью функции реализовать сортировку вставками. Или все , что до этого написано это как описание действий которая должна делать эта функция , реализуя сортировку вставками, да? Или мб просто запутать новичков таких , как я.
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
26.04.2021, 18:00 10
Лучший ответ Сообщение было отмечено Greek21 как решение

Решение

Цитата Сообщение от Greek21 Посмотреть сообщение
но только тогда почему задание не звучит просто как : С помощью функции реализовать сортировку вставками.
Там так и написано... И написано не "в виде функции", а "с помощью функции". А с помощью какой именно функции, написано до этого.
1
26.04.2021, 18:00
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.04.2021, 18:00
Помогаю со студенческими работами здесь

Поиск элемента в упорядоченном массиве
Кому не лень помогите пожалуйста сделать эти задачи. Хотя бы несколько. Буду очень признателена....

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

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

Поиск элемента в упорядоченном массиве
Напишите программу, которая организует хранение в массиве 15 различных введённых с клавиатуры...

Поиск элемента в упорядоченном массиве
Поиск элемента в упорядоченном массиве

Поиск заданного элемента в упорядоченном массиве(бинарный поиск)
Заполнить одномерный массив из n элементов по формуле приведенной в картинке. Размерность массива...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru