Illustrazione di ordinamento a bolle senza codice
Considera il seguente elenco di righe non prestite di caratteri dell'alfabeto:
Q w e r t y u i o pQuesto elenco verrà ordinato in ordine crescente come segue. Nella prima scansione, Q e W vengono confrontati; Q è meno di W, quindi non c'è scambio. Tuttavia, nella prima scansione, W ed E vengono confrontati; E è meno di W, quindi c'è uno scambio. Il nuovo terzo elemento, W, viene confrontato con R; R è inferiore a W, quindi c'è uno scambio. Il nuovo quarto elemento, W, viene confrontato con T; T è meno di W, quindi c'è uno scambio. Il nuovo quinto elemento, W, viene confrontato con Y; W è meno di y e non c'è scambio. Tuttavia, nella prima scansione, Y viene confrontato con u; U è meno di y, quindi c'è uno scambio. Il nuovo settimo elemento, y, viene confrontato con i; Sono meno di Y e c'è uno scambio. Il nuovo ottavo elemento, y, viene confrontato con O; O è meno di y e c'è uno scambio. Il nuovo nono elemento, Y, viene confrontato con P; P è inferiore a Y e c'è uno scambio. La prima scansione termina lì. Il risultato per la prima scansione è,
Q e r t w u i o p ySi noti che l'elemento più grande è alla fine dopo la prima scansione. La scansione di tutti i dieci elementi risultanti e possibili scambiati, si ripete ancora una volta per avere:
E r q t u i o p w ySi noti che il prossimo elemento più grande è ora l'ultimo ma uno elemento e non è stato necessario confrontarlo con l'ultimo elemento, quindi un piccolo momento non sarebbe stato sprecato. La scansione di tutti i dieci elementi risultanti e possibili scambiati, si ripete ancora una volta per avere:
E q r t i o p u w ySi noti che il terzo più grande elemento verso la fine è ora alla terza posizione dalla fine, e non era necessario confrontarlo con gli ultimi due elementi e non è necessario confrontare gli ultimi due elementi stessi, e quindi un po 'di piccolo tempo non sarebbe stato sprecato. La scansione di tutti i dieci elementi risultanti e possibili scambiati, si ripete ancora una volta per avere:
E q r i o p t u w ySi noti che il quarto più grande elemento verso la fine è ora alla quarta posizione dalla fine, e non era necessario confrontarlo con gli ultimi tre elementi e non è necessario confrontare gli ultimi tre elementi stessi, e quindi un po 'di tempo non lo farebbe sono stati sprecati. La scansione di tutti i dieci elementi risultanti e possibili scambiati, si ripete ancora una volta per avere:
E Q i o p r t u w ySi noti che il quinto più grande elemento verso la fine è ora alla quinta posizione dalla fine, e non era necessario confrontarlo con gli ultimi quattro elementi e non è necessario confrontare gli ultimi quattro elementi stessi, e quindi il tempo non avrebbe avuto stato sprecato. La scansione di tutti i dieci elementi risultanti e possibili scambiati, viene nuovamente ripetuta per avere:
E i o p q r t u w yIl resto dei risultati della scansione è il seguente:
E i o p q r t u w ySi noti che non ha avuto luogo alcun ordinamento per questi ultimi quattro risultati.
Il retro di tutti gli algoritmi di cui sopra può essere fatto per la decisione.
Ottimizzazione dell'ordinamento della bolla
Dalla definizione di base di bubble ordin, se ci sono n elementi, allora ci saranno n scansioni complete. Una scansione è un'iterazione. Quindi, i dieci elementi di cui sopra significano dieci iterazioni complete. Il tempo totale del tempo per la bolle Ordina un elenco (array) può essere ridotto per molti elenchi non mobili. Ciò comporta strategie di ordinamento a bolle. Il tipo di bolle è ottimizzato con due strategie.
Prima strategia di ottimizzazione
Si noti da quanto sopra che, dopo la prima iterazione completa, l'elemento più grande è alla fine e sarebbe una perdita di tempo ad accedervi nella seconda iterazione. Dopo la seconda iterazione, gli ultimi due elementi sono nelle loro giuste posizioni e il tempo non dovrebbe essere sprecato ad accedervi nella terza iterazione. Ciò significa che la seconda iterazione dovrebbe terminare a N-1. Dopo la terza iterazione, gli ultimi tre elementi sono nelle loro giuste posizioni e il tempo non dovrebbe essere sprecato ad accedervi nella quarta iterazione. Ciò significa che la terza iterazione dovrebbe terminare a N-2. Dopo la quarta iterazione, gli ultimi quattro elementi sono nelle loro giuste posizioni e il tempo non dovrebbe essere sprecato ad accedervi nella quinta iterazione. Ciò significa che la quarta iterazione dovrebbe terminare a N-3. Questo continua.
Dalla definizione di base del tipo di bolle, l'iterazione deve essere eseguita n. Se il contatore per le n iterazioni è a I, l'iterazione dovrebbe accedere ad elementi n - I per evitare di perdere tempo alla fine dell'array; e con io che inizia da 0. Quindi ci devono essere due java per loops: l'esterno per loop iterano n volte, e il per anello interno iterano n-i volte, per gli elementi dell'array, per ciascuno dei n. Iterare un array n - I Times è la prima strategia.
Seconda strategia di ottimizzazione
Se lo anello esterno dovesse davvero iterare n volte? Se lo anello esterno per l'elenco sopra iterali 10 volte? - No, perché le sue ultime quattro iterazioni non cambierebbero nulla (non fa alcun ordinamento). Ciò significa che l'elenco è stato ordinato non appena viene rilevato; Il ciclo esterno dovrebbe rompersi, quindi l'ordinamento dovrebbe fermarsi. Questo risparmierà più tempo. Ciò può essere ottenuto avendo una variabile booleana per il circuito esterno, che rimarrebbe falso nel circuito interno quando si scambiano.
Codice java per bubble ordin
La seguente classe ha il metodo per eseguire l'ordinamento:
classe aclassNota la condizione while, "j < N - i;” for the inner for-loop, for the first strategy. Note the use of the boolean variable in the outer for-loop and the inner for-loop for the second strategy.
Una classe principale adatta per questo è:
Classe pubblica TheClassL'array viene superato per riferimento al metodo Bubblesort () in una classe diversa. Quindi il suo contenuto viene modificato. L'output è:
E i o p q r t u w y
Conclusione
Ordina delle bolle scambiando elementi adiacenti dall'inizio alla fine dell'elenco. Questa procedura viene ripetuta ancora e ancora fino a quando l'intero elenco non è completamente ordinato. L'ordinamento è ascendente o discendente. L'ordinamento della bolla dovrebbe essere ottimizzato, come spiegato sopra.