BOBLE ORMIN con java

BOBLE ORMIN con java
La sorgente di bolle è l'algoritmo di smistamento più semplice: supponiamo che ci siano elementi di fila che non sono ordinati. BOBLE SORSE SCANSI La riga da sinistra, scambiando qualsiasi coppia adiacente di elementi che non si trova nell'ordine corretto. Questa scansione dell'intera riga viene ripetuta ripetutamente fino a quando l'intera riga non viene ordinata. Se l'ordinamento deve salire, la coppia adiacente viene scambiata per rendere l'elemento a sinistra inferiore all'elemento a destra. Se l'ordinamento deve scendere, la coppia adiacente viene scambiata per rendere l'elemento a sinistra maggiore dell'elemento a destra.

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 p

Questo 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 y

Si 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 y

Si 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 y

Si 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 y

Si 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 y

Si 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 y

Il resto dei risultati della scansione è il seguente:

E i o p q r t u w y
E i o p q r t u w y
E i o p q r t u w y
E i o p q r t u w y

Si 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 aclass
statico void BubbleSort (char arr [])
int n = arr.lunghezza;
booleano scambiato = falso;
per (int i = 0; i < N; i++)
scambiati = false;
per (int j = 1; j < N - i; j++)
if (arr [j] < arr[j - 1])
char temp = arr [j];
arr [j] = arr [j - 1];
arr [j - 1] = temp;
scambiati = vero;


if (scambiati == falso) pausa;


Nota 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 TheClass
public static void main (string [] args)
char ar [] = 'q', 'w', 'e', ​​'r', 't', 'y', 'u', 'i', 'o', 'p';
Una classe.Bubblesort (AR);
per (int i = 0; iSistema.fuori.print (ar [i]); Sistema.fuori.stampa(' ');

Sistema.fuori.println ();

L'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.