Bubble sort non solo non è considerato il piùmetodo veloce, inoltre, chiude la lista dei metodi di ordinamento più lenti. Tuttavia, ha anche i suoi vantaggi. Quindi, l'ordinamento con il metodo delle bolle è la soluzione più logica e naturale al problema, se è necessario disporre gli elementi in un certo ordine. Una persona comune, ad esempio, lo userà manualmente, solo per intuizione.
Il nome del metodo è stato inventato usando un'analogia conbolle d'aria nell'acqua. Questa è una metafora. Proprio come le piccole bolle d'aria salgono verso l'alto - dopotutto, la loro densità è maggiore di qualsiasi liquido (in questo caso, l'acqua), quindi ogni elemento della matrice, più piccolo è di valore, più gradualmente si fa strada all'inizio della lista dei numeri.
Bubble sort viene eseguito come segue:
Ancora più breve, l'algoritmo del futuro programma può essere scritto come segue:
L'implementazione più semplice è la seguente:
procedura Sortirovka_Puzirkom;
L'inizio
ciclo per bene a partire dal nachalnii_index prima konechii_index;
ciclo per e a partire dal nachalnii_index prima konechii_index-1;
se un massiv [i]> massiv [i + 1] (il primo elemento è maggiore del secondo), quindi:
(modificare i valori in alcuni punti);
la fine
Certo, qui la semplicità non fa che esacerbaresituazione: più semplice è l'algoritmo, più tutte le carenze compaiono in esso. Il costo del tempo è troppo alto anche per un piccolo array (qui entra in gioco la relatività: per un profano, la quantità di tempo può sembrare piccola, ma nell'attività di un programmatore ogni secondo o anche un millisecondo conta).
Era necessaria una migliore implementazione. Ad esempio, tenendo conto dello scambio di valori nell'array per luoghi:
procedura Sortirovka_Puzirkom;
L'inizio
sortirovka = vero;
ciclo ciao sortirovka = vero;
sortirovka = falso;
ciclo per e a partire dal nachalnii_index prima konechii_index-1;
se un massiv [i]> massiv [i + 1] (il primo elemento è maggiore del secondo), quindi:
(scambiamo gli elementi in posti);
sortirovka = vero; (ha indicato che lo scambio è stato effettuato).
La fine.
Lo svantaggio principale è la durata del processo. Quanto tempo impiega l'algoritmo di Bubble Sort?
Il tempo di esecuzione è calcolato dal quadrato del numero di numeri nell'array: il risultato finale è proporzionale ad esso.
Nel peggiore dei casi, l'array verrà attraversatotante volte quanti sono gli elementi meno un valore. Questo perché alla fine rimane un solo elemento senza nulla con cui confrontare e l'ultimo passaggio nell'array diventa un'azione inutile.
Inoltre, il metodo di ordinamento per semplicescambi, come viene anche chiamato, solo per piccoli array. Non sarà possibile elaborare grandi quantità di dati con il suo aiuto: il risultato sarà o errori o un fallimento del programma.
Il Bubble sort è molto facile da capire.Nei curricula delle università tecniche, quando si studia l'ordine degli elementi dell'array, è il primo passo. Il metodo è facilmente implementabile sia nel linguaggio di programmazione Delphi (D (Delphi) che in C / C ++ (C / C plus plus), un algoritmo incredibilmente semplice per disporre i valori nell'ordine corretto, e in Pascal. sort è l'ideale per i principianti.
A causa di carenze, l'algoritmo non viene utilizzato per scopi extracurricolari.
Vista iniziale della matrice 8 22 4 74 44 37 1 7
Passaggio 1 8 22 4 74 44 37 1 7
8 22 4 74 44 1 37 7
8 22 4 74 1 44 37 7
8 22 4 1 74 44 37 7
8 22 1 4 74 44 37 7
8 1 22 4 74 44 37 7
1 8 22 4 74 44 37 7
Passaggio 2 1 8 22 4 74 44 7 37
1 8 22 4 74 7 44 37
1 8 22 4 7 74 44 37
1 8 22 4 7 74 44 37
1 8 4 22 7 74 44 37
1 4 8 22 7 74 44 37
Passaggio 3 1 4 8 22 7 74 37 44
1 4 8 22 7 37 74 44
1 4 8 22 7 37 74 44
1 4 8 7 22 37 74 44
1 4 7 8 22 37 74 44
Passaggio 4 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Passaggio 5 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Passaggio 6 1 4 7 8 22 37 44 74
1 4 7 8 22 37 44 74
Passaggio 7 1 4 7 8 22 37 44 74
Esempio:
const kol_mas = 10;
var massiv: array [1..kol_mas] di numero intero;
a, b, k: intero;
inizio
writeln ("input", kol_mas, "elementi di array");
per a: = 1 to kol_mas do readln (massiv [a]);
per a: = 1 a kol_mas-1 iniziano
per b: = a + 1 a kol_mas iniziano
se massiv [a]> massiv [b] allora inizia
k: = massiv [a]; massiv [a]: = massiv [b]; massiv [b]: = k;
fine;
fine;
fine;
writeln ("dopo l'ordinamento");
per a: = 1 a kol_mas do writeln (massiv [a]);
fine.
Esempio:
#includere
#includere
int main (int argc, char * argv [])
{
int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;
per (;;) {
ff = 0;
per (i = 7; i> 0; i -) {
if (massiv [i] <massiv [i-1]) {
swap (massiv [i], massiv [i-1]);
ff ++;
}
}
if (ff == 0) interrompe;
}
getch (); // ritardo dello schermo
return 0;
}.