0
votes

Fonction de recherche binaire qui affiche toutes les valeurs correspondantes?

J'ai une mission qui me demande de créer une fonction de recherche binaire qui recherchera une matrice de structures contenant des dates pour un mois spécifié, puis d'imprimer toutes ces entrées avec des mois correspondants.

J'ai un très difficile Temps d'obtention de la recherche binaire correctement lorsque je recherche de multiples valeurs et que je ne peux pas sembler comprendre où je vais vous tromper. p>

Voici ma fonction de recherche binaire: p> xxx pré>

et voici ma fonction principale: p>

const int MAX = 50;

int main()
{
    Event* event_pointers[MAX];
    int count, userMonth;
    char userString[80];

    count = readEvents(event_pointers, MAX);

    sort_desc(event_pointers, count);
    display(event_pointers, count);

    cout << "\n\nEnter a search string: ";
    cin.getline(userString, 80, '\n');
    cin.ignore();

    linsearch(event_pointers, count, userString);

    sort_date(event_pointers, count);
    display(event_pointers, count);

    cout << "\n\nEnter a month to list Events for: ";
    cin >> userMonth;
    cin.ignore();

    binsearch(event_pointers, count, userMonth);

    for (int j = 0; j < count; j++) //Cleanup loop
        delete event_pointers[j];

    cout << "\nPress any key to continue...";
    (void)_getch();
    return 0;
}


1 commentaires

Cela peut aider à utiliser un IDE pour passer à travers et voir ce qui se passe


3 Réponses :


1
votes

Ne définissez pas ces indices avec bInsearch. Recherchez une occurrence que de la boucle vers le bas et vers le haut jusqu'à ce que les conditions échouent. Quelque chose comme xxx


0 commentaires

0
votes

Pour concevoir une fonction de recherche binaire correcte, n'essayez pas de deviner la solution, il est difficile de le faire correctement. Utilisez la méthode des invariants de boucle. La fonction qui trouve la première occurrence est appelée inférieur_bound Dans la bibliothèque standard, utilisons également ce nom ici aussi: xxx

introduisons la variable Dernière : Auto Dernier = premier + taille . Nous recherchons un point de transition pt , tel que dans la plage [premier, pt) , tous les éléments ont des valeurs , et Dans la plage [pt, dernier) , tous les éléments ont des valeurs > = valeur . Introduisons deux itérateurs (pointeurs) gauche et droit avec les invariants de boucle:


0 commentaires

0
votes

1 Définissez votre exemple comme cet exemple, xxx pré>

2 éléments de tri comme, p> xxx pré>

3 utilise p>

std::equal_range(elements.begin(), elements.end(), your_target_month);


0 commentaires