Contiamo il numero di letture e scritture di elementi array. Per fare il bubble sort, hai bisogno di accessi (la scrittura iniziale alla fine, poi, nel peggiore dei casi, due letture e due scritture di fare n swap). Per eseguire la ricerca binaria, abbiamo bisogno di 2 log n + 2 n + 1 ( 2 log n per la ricerca binaria, quindi, nel caso peggiore, 2 n per spostare gli elementi dell'array a destra, quindi 1 per scrivere l'elemento dell'array in la sua posizione corretta).1+4nn2logn+2n+12logn2n
Quindi entrambi i metodi hanno la stessa complessità per le implementazioni di array, ma il metodo di ricerca binaria richiede meno accessi di array nel lungo periodo ... asintoticamente, la metà. Ci sono altri fattori in gioco, naturalmente.
In realtà, è possibile utilizzare implementazioni migliori e contare solo gli accessi effettivi all'array (non gli accessi all'elemento da inserire). Potresti fare per l'ordinamento a bolle, e registrare n + 2 n + 1 per la ricerca binaria ... quindi se l'accesso al registro / cache è economico e l'accesso all'array è costoso, cerca dalla fine e spostati lungo la strada (più intelligente ordinamento a bolle per l'inserimento) potrebbe essere migliore, anche se non asintoticamente.2n+1logn+2n+1
Una soluzione migliore potrebbe comportare l'utilizzo di una diversa struttura di dati. Le matrici forniscono O (1) accessi (accesso casuale), ma gli inserimenti e le eliminazioni potrebbero costare. Una tabella hash potrebbe avere O (1) inserimenti ed eliminazioni, gli accessi costerebbero. Altre opzioni includono BST e heap, ecc. Potrebbe valere la pena considerare le esigenze di utilizzo dell'applicazione per l'inserimento, la cancellazione e l'accesso e scegliere una struttura più specializzata.
Si noti inoltre che se si desidera aggiungere elementi a un array ordinato di n elementi, una buona idea potrebbe essere quella di ordinare in modo efficiente gli elementi m , quindi unire i due array; inoltre, le matrici ordinate possono essere costruite in modo efficiente usando ad es. heap (ordinamento di heap).mnm