Recherche de la première occurrence dans un tableau trié

C++Beginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, nous allons apprendre à trouver la première occurrence d'un nombre donné dans un tableau trié en utilisant une recherche dichotomique modifiée en C++.

Le fichier de code C++

Tout d'abord, créons un fichier de code C++ nommé main.cpp dans le répertoire ~/project à l'aide de l'éditeur de texte touch.

touch ~/project/main.cpp

Inclure les en-têtes nécessaires dans le code

Nous devons inclure les fichiers d'en-tête C++ nécessaires dans notre programme. Copiez et collez le code suivant dans votre fichier main.cpp.

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

Créer une fonction pour trouver la première occurrence d'un élément

Nous allons créer une fonction appelée first() qui prend un tableau, son indice inférieur, son indice supérieur et l'élément à rechercher en entrée. La fonction retournera l'indice de la première occurrence de l'élément. Incluez le code suivant dans le fichier 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;
}

Ici, nous avons utilisé la recherche dichotomique pour trouver la première occurrence de l'élément. Nous avons initialisé la variable res à -1 pour gérer le cas où l'élément n'est pas présent dans le tableau. Si l'élément du milieu est égal à l'élément que nous cherchons, nous stockons l'indice de l'élément du milieu dans res et mettons à jour l'indice supérieur à m-1 car nous cherchons la première occurrence de l'élément. Si l'élément du milieu est supérieur à l'élément que nous cherchons, nous mettons à jour l'indice supérieur à m-1, et s'il est inférieur à l'élément, nous mettons à jour l'indice inférieur à m+1.

Implémenter la fonction principale

Dans la fonction principale, nous allons créer un tableau, appeler la fonction first créée à l'étape 3 avec les arguments appropriés et afficher le résultat à la console. Copiez et collez le code ci-dessous dans la fonction main.

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

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

    int k = 4; //l'élément pour lequel on veut trouver l'indice de la première occurrence

    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;
}

Ici, nous avons déclaré un tableau d'entiers nommé a et l'initialisé avec des valeurs d'entiers triées. Nous avons également calculé le nombre d'éléments dans le tableau à l'aide de l'opérateur sizeof. Nous avons ensuite appelé la fonction first() avec les arguments appropriés et affiché le résultat.

Compiler et exécuter le code C++

Maintenant, nous pouvons compiler et exécuter le code C++ à l'aide des commandes suivantes.

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

Si tout se passe bien, la sortie sera The index of the first occurrence of 4 is: 3.

Résumé

Dans ce laboratoire, nous avons appris à trouver la première occurrence d'un nombre donné dans un tableau trié en utilisant une recherche dichotomique modifiée en C++. Nous avons créé une fonction first() pour implémenter l'algorithme.