Поиск первого вхождения в отсортированном массиве

C++Beginner
Практиковаться сейчас

Введение

В этом лабе мы узнаем, как найти первое вхождение заданного числа в отсортированном массиве с использованием модифицированного двоичного поиска на C++.

Файл кода на C++

Во - первых, создадим файл кода на C++ с именем main.cpp в директории ~/project с использованием текстового редактора touch.

touch ~/project/main.cpp

Включите необходимые заголовочные файлы в код

В нашем программе необходимо включить необходимые заголовочные файлы на C++. Скопируйте и вставьте следующий код в файл main.cpp.

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

Создайте функцию для поиска первого вхождения элемента

Мы создадим функцию под названием first(), которая принимает массив, его нижний индекс, верхний индекс и элемент, который нужно найти, в качестве входных данных. Функция вернет индекс первого вхождения элемента. Включите следующий код в файл main.cpp.

int first(int a[], int l, int h, int b)
{
    int res = -1;
    while (l <= h)
    {
        int m = (l + h) / 2;
        if (a[m] == b)
        {
            res = m;
            h = m - 1;
        }
        else if (a[m] > b)
        {
            h = m - 1;
        }
        else
        {
            l = m + 1;
        }
    }
    return res;
}

Здесь мы использовали двоичный поиск для нахождения первого вхождения элемента. Мы инициализировали переменную res значением -1, чтобы обработать случай, когда элемент отсутствует в массиве. Если средний элемент равен элементу, который мы ищем, мы храним индекс среднего элемента в res и обновляем верхний индекс до m-1, так как мы ищем первое вхождение элемента. Если средний элемент больше элемента, который мы ищем, мы обновляем верхний индекс до m-1, а если он меньше элемента, мы обновляем нижний индекс до m+1.

Реализуйте главную функцию

В главной функции мы создадим массив, вызовем функцию first, созданную на шаге 3, с соответствующими аргументами и выведем результат в консоль. Скопируйте и вставьте следующий код в функцию main.

int main()
{
    int a[] = {2, 3, 3, 4, 4, 4, 4, 4, 5};

    int n = sizeof(a) / sizeof(a[0]);

    int k = 4; //элемент, для которого нужно найти индекс первого вхождения

    int f = first(a, 0, n - 1, k);

    if(f==-1)
    {
        cout << "Element not found\n";
    }
    else
    {
        cout << "The index of the first occurrence of " << k << " is: " << f << endl;
    }

    return 0;
}

Здесь мы объявили массив целых чисел под названием a и инициализировали его отсортированными значениями целых чисел. Мы также вычислили количество элементов в массиве с использованием оператора sizeof. Затем мы вызвали функцию first() с соответствующими аргументами и вывели результат.

Компилируйте и запускайте код на C++

Теперь мы можем скомпилировать и запустить код на C++ с использованием следующих команд.

g++ main.cpp -o main &&./main

Если все прошло успешно, вывод будет The index of the first occurrence of 4 is: 3.

Резюме

В этом практическом занятии мы научились искать первое вхождение заданного числа в отсортированном массиве с использованием модифицированного двоичного поиска на C++. Мы создали функцию first(), чтобы реализовать алгоритм.