Hai incontrato un gruppo di matematici che sono anche cantautori. Hanno scritto una canzone per ciascuno dei loro numeri preferiti e, come puoi immaginare, hanno un sacco di numeri preferiti (come 0 o 73 o 6174).
Sei curioso di sentire la canzone del tuo numero preferito, ma con così tante canzoni da setacciare, trovare quella giusta potrebbe richiedere un po' di tempo. Per fortuna, hanno organizzato le loro canzoni in una playlist ordinata per titolo, che poi è semplicemente il numero di cui parla la canzone.
A questo punto ti rendi conto che puoi usare un algoritmo di ricerca binaria per trovare rapidamente una canzone a partire dal titolo.
Il tuo compito è implementare un algoritmo di ricerca binaria.
Un algoritmo di ricerca binaria trova un elemento in un array dividendolo ripetutamente a metà e tenendo solo la metà che contiene l'elemento che stiamo cercando. Ci permette di restringere rapidamente le possibili posizioni del nostro elemento finché non lo troviamo, o finché non abbiamo eliminato tutte le posizioni possibili.
La ricerca binaria funziona solo se l'array è ordinato.
L'algoritmo funziona così:
Ecco un esempio:
Supponiamo di cercare il numero 23 nel seguente array ordinato: [4, 8, 12, 16, 23, 28, 32].
[23, 28, 32].[23].Rust mette già a disposizione nella sua libreria standard una funzione di ricerca binaria. Per questo esercizio non dovresti usare questa funzione, ma solo altri strumenti di base.
Hai fatto passare i test e hai mantenuto il codice pulito? Se vuoi, ci sono alcune cose aggiuntive che potresti provare.
Per eseguire i test bonus, rimuovi il flag #[ignore] ed esegui i test con la
feature generic, in questo modo:
$ cargo test --features generic
Poi condividi le tue opinioni in un commento sulla soluzione inviata. Questo esperimento ha migliorato il codice? Peggiorato? Hai imparato qualcosa?
Iscriviti a Exercism per imparare e padroneggiare Rust con 99 esercizi e il mentoring di persone reali, tutto gratis.