/ / Metodi di ordinamento nella programmazione: Bubble Sort

Tecniche di ordinamento nella programmazione: Bubble Sort

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.

Da dove viene questo nome insolito?

Bubble sort

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.

Descrizione dell'algoritmo

Bubble sort viene eseguito come segue:

  • primo passaggio: gli elementi della matrice di numeri sono presi da due e vengono anche confrontati a coppie. Se in alcuni due elementi il ​​primo valore risulta essere maggiore del secondo, il programma scambia le loro posizioni;
  • pertanto, il numero più grande finisce alla fine della matrice. Mentre tutti gli altri elementi rimangono, come erano, in un ordine caotico e richiedono ancora l'ordinamento;
  • quindi, il secondo passaggio è necessario: è eseguito per analogia con il precedente (già descritto) e ha il numero di confronti - meno uno;
  • il passaggio numero tre ha un confronto in meno rispetto al secondo e due in meno rispetto al primo. E così via;
  • per riassumere, ogni passaggio ha (valori totali nell'array, un numero specifico) meno (numero di passaggio) confronti.

Bubble sort

Ancora più breve, l'algoritmo del futuro programma può essere scritto come segue:

  • viene controllato un array di numeri finché non vengono trovati due numeri e il secondo di essi deve essere maggiore del primo;
  • il programma scambia gli elementi della matrice posizionati in modo errato tra loro.

Pseudocodice basato sull'algoritmo descritto

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.

Svantaggi del metodo

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.

pascal bubble sort

dignità

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.

Principio di ordinamento chiaro

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 di Bubble Sort in Pascal

algoritmo di bubble sort

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 di Bubble Sort in C (C)

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;

}.

piaciuto:
0
Post popolari
Sviluppo spirituale
cibo
y