Algoritmi C/C++

Ricerca binaria

La ricerca binaria elimina metà intervallo dopo ogni confronto.

Che cos’è Ricerca binaria?

La ricerca binaria elimina metà intervallo dopo ogni confronto.

Cerca dati ordinati in tempo logaritmico.

Punti importanti

  • Testa input vuoti, singoli, duplicati e ordinati.
  • Separa correttezza e ottimizzazione.
  • Preferisci la standard library in produzione.

Visualizzatore di Ricerca binaria

O(log n)

Usa Avvia o Passo per seguire ogni confronto e spostamento dei dati.

Esempi di codice C e C++

C
Esegui →
main.c
#include <stdio.h>

int search(const int *values, int size, int target) {
    int low = 0;
    int high = size - 1;
    while (low <= high) {
        int middle = low + (high - low) / 2;
        if (values[middle] == target) return middle;
        if (values[middle] < target) low = middle + 1;
        else high = middle - 1;
    }
    return -1;
}

int main(void) {
    int values[] = {3, 7, 11, 16, 23, 28};
    printf("index=%d\n", search(values, 6, 23));
}
Output previsto
index=4
C++
Esegui →
main.cpp
#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    std::vector values{3, 7, 11, 16, 23, 28};
    auto match = std::lower_bound(values.begin(), values.end(), 23);
    std::cout << "index="
              << std::distance(values.begin(), match) << '\n';
}
Output previsto
index=4

Confronto tra C e C++

L’input deve essere ordinato. Il loop C e std::lower_bound sono O(log n) su random access.

C

Loop, puntatori, dimensioni e buffer sono espliciti.

C++

Iteratori e algoritmi separano operazione e storage.

Esercizi pratici

Esegui entrambe le versioni e modificale per osservare le diverse garanzie.

  • Traccia ogni confronto.
  • Testa duplicati e valori estremi.
  • Confronta con la standard library.