Bubble Algoritmo di ordinamento con Python utilizzando l'esempio di elenco

Che cos'รจ un Bubble Ordina?

Bubble Ordina รจ un algoritmo di ordinamento utilizzato per ordinare gli elementi dell'elenco in ordine crescente confrontando due valori adiacenti. Se il primo valore รจ maggiore del secondo valore, il primo valore occupa la posizione del secondo valore, mentre il secondo valore occupa la posizione del primo valore. Se il primo valore รจ inferiore al secondo valore, non viene effettuato alcuno scambio.

Questo processo viene ripetuto finchรฉ tutti i valori in un elenco non sono stati confrontati e scambiati, se necessario. Ogni iterazione viene solitamente chiamata passaggio. Il numero di passaggi in un bubble sort รจ uguale al numero di elementi in un elenco meno uno.

In questa Bubble Ordinamento Python lezione imparerai:

L'implementazione di Bubble Algoritmo di ordinamento

Suddivideremo l'implementazione in tre (3) passaggi, vale a dire il problema, la soluzione e l'algoritmo che possiamo utilizzare per scrivere codice per qualsiasi linguaggio.

Il problema

Viene fornito un elenco di elementi in ordine casuale e vorremmo disporre gli elementi in modo ordinato

Considerate il seguente elenco:

[21,6,9,33,3]

La soluzione

Scorrere l'elenco confrontando due elementi adiacenti e scambiandoli se il primo valore รจ superiore al secondo valore.

Il risultato dovrebbe essere il seguente:

[3,6,9,21,33]

Algoritmo

L'algoritmo di ordinamento delle bolle funziona come segue

Passo 1) Ottieni il numero totale di elementi. Ottieni il numero totale di elementi nell'elenco fornito

Passo 2) Determinare il numero di passaggi esterni (n โ€“ 1) da eseguire. La sua lunghezza รจ lista meno uno

Passo 3) Esegui i passaggi interni (n โ€“ 1) volte per il passaggio esterno 1. Ottieni il valore del primo elemento e confrontalo con il secondo valore. Se il secondo valore รจ inferiore al primo valore, scambia le posizioni

Passo 4) Ripetere i passaggi del passaggio 3 fino a raggiungere il passaggio esterno (n โ€“ 1). Ottieni l'elemento successivo nell'elenco, quindi ripeti il โ€‹โ€‹processo eseguito nel passaggio 3 finchรฉ tutti i valori non sono stati inseriti nel corretto ordine crescente.

Passo 5) Restituisce il risultato quando tutti i passaggi sono stati eseguiti. Restituisce i risultati dell'elenco ordinato

Passo 6) Ottimizza algoritmo

Evitare passaggi interni non necessari se l'elenco o i valori adiacenti sono giร  ordinati. Ad esempio, se l'elenco fornito contiene giร  elementi che sono stati ordinati in ordine crescente, possiamo interrompere il ciclo in anticipo.

Ottimizzato Bubble Algoritmo di ordinamento

Per impostazione predefinita, l'algoritmo per l'ordinamento a bolle in Python confronta tutti gli elementi nell'elenco indipendentemente dal fatto che l'elenco sia giร  ordinato o meno. Se l'elenco specificato รจ giร  ordinato, confrontare tutti i valori รจ uno spreco di tempo e risorse.

L'ottimizzazione del bubble sort ci aiuta a evitare iterazioni non necessarie e a risparmiare tempo e risorse.

Ad esempio, se il primo e il secondo elemento sono giร  ordinati, non รจ necessario scorrere il resto dei valori. L'iterazione viene terminata e viene avviata quella successiva fino al completamento del processo come mostrato di seguito Bubble Esempio di ordinamento.

L'ottimizzazione viene eseguita utilizzando i seguenti passaggi

Passo 1) Crea una variabile flag che monitora se si รจ verificato uno scambio nel ciclo interno

Passo 2) Se i valori hanno scambiato le posizioni, continuare con l'iterazione successiva

Passo 3) Se i benefici non si sono scambiati di posizione, termina il ciclo interno e continua con quello esterno.

Un bubble sort ottimizzato รจ piรน efficiente poichรฉ esegue solo i passaggi necessari e salta quelli non richiesti.

Rappresentazione visiva

Dato un elenco di cinque elementi, le immagini seguenti illustrano come l'ordinamento a bolle itera attraverso i valori durante l'ordinamento

L'immagine seguente mostra l'elenco non ordinato

Rappresentazione visiva

Prima iterazione

Passo 1)

Rappresentazione visiva

I valori 21 e 6 vengono confrontati per verificare quale รจ maggiore dell'altro.

Rappresentazione visiva

21 รจ maggiore di 6, quindi 21 prende la posizione occupata da 6 mentre 6 prende la posizione che era occupata da 21

Rappresentazione visiva

Il nostro elenco modificato ora assomiglia a quello sopra.

Passo 2)

Rappresentazione visiva

I valori 21 e 9 vengono confrontati.

Rappresentazione visiva

21 รจ maggiore di 9, quindi invertiamo le posizioni di 21 e 9

Rappresentazione visiva

Il nuovo elenco รจ ora come sopra

Passo 3)

Rappresentazione visiva

I valori 21 e 33 vengono confrontati per trovare quello maggiore.

Rappresentazione visiva

Il valore 33 รจ maggiore di 21, quindi non avviene alcuno scambio.

Passo 4)

Rappresentazione visiva

I valori 33 e 3 vengono confrontati per trovare quello maggiore.

Rappresentazione visiva

Il valore 33 รจ maggiore di 3, quindi invertiamo le loro posizioni.

Rappresentazione visiva

L'elenco ordinato alla fine della prima iterazione รจ come quello sopra

Seconda iterazione

Il nuovo elenco dopo la seconda iterazione รจ il seguente

Rappresentazione visiva

Terza iterazione

Il nuovo elenco dopo la terza iterazione รจ il seguente

Rappresentazione visiva

Quarta iterazione

Il nuovo elenco dopo la quarta iterazione รจ il seguente

Rappresentazione visiva

Python Esempi

Il codice seguente mostra come implementare il Bubble Algoritmo di ordinamento in Python.

def bubbleSort( theSeq ):
    n = len( theSeq )

    for i in range( n - 1 ) :
        flag = 0

        for j in range(n - 1) :
            
            if theSeq[j] > theSeq[j + 1] : 
                tmp = theSeq[j]
                theSeq[j] = theSeq[j + 1]
                theSeq[j + 1] = tmp
                flag = 1

        if flag == 0:
            break

    return theSeq

el = [21,6,9,33,3] 

result = bubbleSort(el)

print (result)

Esecuzione del programma di ordinamento a bolle sopra riportato in Python produce i seguenti risultati

[6, 9, 21, 3, 33]

Spiegazione del codice

La spiegazione per il Python Bubble L'ordinamento del codice del programma รจ il seguente

Spiegazione del codice

QUI,

  1. Definisce una funzione bubbleSort che accetta un parametro theSeq. Il codice non restituisce nulla.
  2. Ottiene la lunghezza dell'array e assegna il valore a una variabile n. Il codice non restituisce nulla
  3. Avvia un ciclo for che esegue l'algoritmo di bubble sort (n โ€“ 1) volte. Questo รจ il circuito esterno. Il codice non restituisce nulla
  4. Definisce una variabile flag che verrร  utilizzata per determinare se si รจ verificato uno scambio o meno. Questo รจ per scopi di ottimizzazione. Il codice non restituisce nulla
  5. Avvia il ciclo interno che confronta tutti i valori nell'elenco dal primo all'ultimo. Il codice non produce nulla.
  6. Utilizza l'istruzione if per verificare se il valore sul lato sinistro รจ maggiore di quello sul lato immediatamente destro. Il codice non restituisce nulla.
  7. Assegna il valore di theSeq[j] a una variabile temporale tmp se la condizione risulta vera. Il codice non restituisce nulla
  8. Il valore di theSeq[j + 1] รจ assegnato alla posizione di theSeq[j]. Il codice non restituisce nulla
  9. Il valore della variabile tmp รจ assegnato alla posizione theSeq[j + 1]. Il codice non restituisce nulla
  10. Alla variabile flag viene assegnato il valore 1 per indicare che ha avuto luogo uno scambio. Il codice non restituisce nulla
  11. Utilizza un'istruzione if per verificare se il valore del flag variabile รจ 0. Il codice non restituisce nulla
  12. Se il valore รจ 0, chiamiamo l'istruzione break che esce dal ciclo interno.
  13. Restituisce il valore di theSeq dopo che รจ stato ordinato. Il codice restituisce l'elenco ordinato.
  14. Definisce una variabile el che contiene un elenco di numeri casuali. Il codice non restituisce nulla.
  15. Assegna il valore della funzione bubbleSort a un risultato variabile.
  16. Stampa il valore del risultato della variabile.

Bubble sorta di vantaggi

Di seguito sono riportati alcuni dei vantaggi dell'algoritmo bubble sort

  • รˆ facile da capire
  • Funziona molto bene quando l'elenco รจ giร  o quasi ordinato
  • Non richiede memoria estesa.
  • รˆ facile scrivere il codice per l'algoritmo
  • I requisiti di spazio sono minimi rispetto ad altri algoritmi di ordinamento.

Bubble ordinare Svantaggi

Di seguito sono riportati alcuni degli svantaggi dell'algoritmo bubble sort

  • Non funziona bene quando si ordinano elenchi di grandi dimensioni. Ci vuole troppo tempo e risorse.
  • Viene utilizzato principalmente per scopi accademici e non per applicazioni nel mondo reale.
  • Il numero di passaggi necessari per ordinare la lista รจ dell'ordine n2

Analisi della complessitร  di Bubble Ordina

Esistono tre tipi di complessitร :

1) Ordina la complessitร 

La complessitร  di ordinamento รจ utilizzata per esprimere la quantitร  di tempi di esecuzione e spazio necessari per ordinare l'elenco. Il bubble sort esegue (n โ€“ 1) iterazioni per ordinare l'elenco, dove n รจ il numero totale di elementi nell'elenco.

2) Complessitร  temporale

La complessitร  temporale dell'ordinamento a bolle รจ O(n2)

Le complessitร  temporali possono essere classificate come:

  • Caso peggiore โ€“ qui รจ dove l'elenco fornito รจ in ordine decrescente. L'algoritmo esegue il numero massimo di esecuzioni espresso come [Big-O] O(n2)
  • caso migliore โ€“ questo avviene quando l'elenco fornito รจ giร  ordinato. L'algoritmo esegue il numero minimo di esecuzioni che รจ espresso come [Big-Omega] ฮฉ(n)
  • Caso medio โ€“ questo accade quando l'elenco รจ in ordine casuale. La complessitร  media รจ rappresentata come [Big-theta] โŠ(n2)

3) Complessitร  dello spazio

La complessitร  spaziale misura la quantitร  di spazio extra necessaria per ordinare l'elenco. Il bubble sort richiede solo uno (1) spazio extra per la variabile temporale utilizzata per lo scambio di valori. Pertanto, ha una complessitร  spaziale di O (1).

Sintesi

  • L'algoritmo di ordinamento delle bolle funziona confrontando due valori adiacenti e scambiandoli se il valore a sinistra รจ inferiore al valore a destra.
  • L'implementazione di un algoritmo di ordinamento a bolle รจ relativamente semplice con Python. Tutto quello che devi usare sono i cicli for e le istruzioni if.
  • Il problema risolto dall'algoritmo Bubble Sort รจ prendere un elenco casuale di elementi e trasformarlo in un elenco ordinato.
  • L'algoritmo di ordinamento a bolle nella struttura dei dati offre prestazioni migliori quando l'elenco รจ giร  ordinato poichรฉ esegue un numero minimo di iterazioni.
  • L'algoritmo di ordinamento delle bolle non funziona bene quando l'elenco รจ in ordine inverso.
  • L'ordinamento bubbler ha una complessitร  temporale di O (n2) e una complessitร  spaziale di O (1)
  • L'algoritmo di ordinamento bubbler รจ piรน adatto per scopi accademici e non per applicazioni nel mondo reale.
  • L'ordinamento a bolle ottimizzato rende l'algoritmo piรน efficiente saltando iterazioni non necessarie durante il controllo dei valori che sono giร  stati ordinati.

Riassumi questo post con: