750 Shares 8781 views

tecniche di programmazione di ordinamento: l'ordinamento "bolla"

bubble sort non solo è considerato essere il metodo più veloce, inoltre, chiude l'elenco dei modi più lenti per organizzare. Tuttavia, ha i suoi vantaggi. Così, il metodo di selezione bolla – la più che nessuno dei due è una soluzione naturale e logica al problema, se si desidera disporre gli elementi in un ordine specifico. Una persona comune manualmente, per esempio, li usare – basta con l'intuizione.

Dove ha fatto un nome così insolito?

Nome metodo si avvicinò, usando l'analogia di bolle d'aria in acqua. Si tratta di una metafora. Proprio come piccole bolle d'aria salgono verso l'alto – perché la loro densità è maggiore di un fluido (in questo caso – l'acqua), e ciascun elemento di matrice, minore è il valore, il modo più graduale all'inizio i numeri di elenco.

Descrizione dell'algoritmo

bolla ordinamento viene eseguita come segue:

  • primo passaggio: gli elementi dei numeri di matrice è assunto dai due coppie e anche confrontati. Se alcuni elementi della squadra primo valore di due uomini è maggiore del secondo, il programma li rende luoghi di scambio;
  • di conseguenza, il maggior numero di esce alla fine dell'array. Mentre tutti gli altri elementi rimangono come erano, in maniera caotica, e richiedono più smistamento;
  • e quindi richiedono una seconda passata: essa è fatta in analogia con la precedente (già descritta) e ha una serie di confronti – meno uno;
  • al numero di passaggio tre confronti, uno in meno del secondo, e il due, rispetto al primo. E così via;
  • riassumere che ogni passaggio contiene (tutti i valori nella matrice, il numero particolare) meno confronti (numero di passaggio).

Ancora più breve algoritmo di un programma può essere scritto come:

  • una matrice di numeri è controllata finché si trovano due numeri, il secondo dei quali è destinato ad essere maggiore del primo;
  • mal posizionato in relazione tra loro elementi di swap software matrice.

Pseudocodice in base all'algoritmo descritto

L'implementazione più semplice viene eseguita nel modo seguente:

Procedura Sortirovka_Puzirkom;

inizio

cicli j da nachalnii_index a konechii_index;

ciclo per i da nachalnii_index a konechii_index-1;

se massiv [i]> massiv [i + 1] (primo elemento maggiore di un secondo), allora:

(Cambiamento pone valori);

fine

Naturalmente, questa semplicità aggrava solo la situazione: la più semplice l'algoritmo, più si manifesta tutti i difetti. rapporto di investimento di tempo è troppo grande anche per un piccolo array (qui entra in gioco la relatività: La quantità di tempo per il profano può sembrare piccolo, ma in realtà un programmatore ogni secondo o addirittura millisecondo conta).

Ci sono voluti la migliore attuazione. Ad esempio, prendendo in considerazione lo scambio di valori in posizioni di matrice:

Procedura Sortirovka_Puzirkom;

inizio

sortirovka = true;

ciclo fino sortirovka = TRUE;

sortirovka = falso;

ciclo per i da nachalnii_index a konechii_index-1;

se massiv [i]> massiv [i + 1] (primo elemento maggiore di un secondo), allora:

(Di modificare gli elementi posti);

sortirovka = true; (Identificato che lo scambio è stato fatto).

Fine.

limitazioni

Lo svantaggio principale – la durata del processo. Quanto tempo viene eseguita algoritmo di ordinamento bolla?

tempo di anticipo viene calcolato dal numero di numeri quadrati nella matrice – il risultato finale è proporzionale.

Se il caso peggiore la matrice si passa le volte che ha elementi meno un valore. Questo accade perché alla fine c'è solo un elemento, che non hanno nulla da confrontare, e l'ultima passata attraverso l'array diventa azione inutile.

Inoltre, efficace metodo di ordinamento un semplice scambio, come viene chiamato, solo per array di piccole dimensioni. Grandi quantità di dati con l'aiuto di processo non funzionano: il risultato sarà o un errore o il fallimento del programma.

dignità

bubble sort è molto facile da capire. Piani di studio delle università tecniche nello studio degli elementi ordinatori della sua matrice passare in primo luogo. Il metodo è facile da implementare sia il linguaggio Delphi di programmazione (L (Delphi), e il C / C ++ (C / C plus plus), un incredibilmente semplici valori di algoritmo di posizione nel giusto ordine e al Pascal (Pascal). Bubble sort è ideale per i principianti.

A causa degli inconvenienti dell'algoritmo non viene utilizzato per scopi extra.

Principio di smistamento visivo

La visualizzazione iniziale della matrice 8 22 4 74 44 37 1 7

Fase 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 74 44 37 4 7

Passo 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

Passo 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

Fase 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

Fase 6 1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

Fase 7 1 4 7 8 22 37 44 74

bubble sort esempio in Pascal

esempio:

kol_mas const = 10;

var massiv: array [1..kol_mas] di interi;

a, b, k: numero intero;

iniziare

writeln ( 'ingresso', kol_mas, sugli elementi di matrice ');

per una: = 1 per kol_mas fare readln (massiccio [a ]);

per una: = 1 a kol_mas-1 fare iniziare

per la B: = a + 1 a kol_mas do begin

se massiv [a]> massiv [ b] quindi iniziare

k: = massiv [a]; massiv [a]: = massiv [ b]; massiv [b]: = k;

fine;

fine;

fine;

writeln ( 'dopo la specie');

per una: = 1 per kol_mas fare writeln (massiccio [a ]);

end.

bolla ESEMPIO l'ordinamento in linguaggio C (C)

esempio:

#include

#include

int main (int argc, char * argv [])

{

int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88}, i, ff;

for (;;) {

FF = 0;

for (i = 7; i> 0; i -) {

if (massiv [i] <massiccio [I- 1]) {

swap (massiv [i], massello [I- 1]);

ff ++;

}

}

if (ff == 0) break;

}

getch (); // ritardo di visualizzazione

return 0;

}.