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

⚡ Riepilogo intelligente

Bubble Sort ordina gli elementi della lista in ordine crescente confrontando ripetutamente i valori adiacenti e scambiandoliping quando l'elemento a sinistra è più grande. Questo semplice ordinamento per confronto è adatto a set di dati piccoli o quasi ordinati e insegna efficacemente la logica di ordinamento di base.

  • 🔁 Meccanismo principale: BubblL'algoritmo di ordinamento confronta ogni coppia di elementi adiacenti e li scambia, spostando il valore non ordinato più grande nella sua posizione finale dopo ogni passaggio.
  • ⚙️ Variante ottimizzata: Una variabile flag rileva quando un passaggio non effettua scambi, interrompendo il ciclo in anticipo in modo che una lista già ordinata termini in una singola scansione.
  • 🐍 Python Implementazione Due cicli annidati più una variabile temporanea ordinano la lista e la procedura guidata associa a ciascuna riga il suo comportamento preciso.
  • 📊 Profilo di complessità: La complessità temporale è O(n²) nei casi peggiori e medi, Ω(n) nel migliore dei casi, con un requisito di spazio costante O(1).
  • 🎯 migliore vestibilità: Bubblesort eccelle nell'insegnamento e nelle liste quasi ordinate, ma ha prestazioni scarse su grandi insiemi di dati rispetto ad algoritmi più avanzati.

Bubble Algoritmo di ordinamento

Che cos'è un Bubble Ordina?

Bubble Ordina è un algoritmo di ordinamento utilizzato per ordinare gli elementi di una lista in ordine crescente confrontando due valori adiacenti. Se il primo valore è maggiore del secondo, il primo valore prende la posizione del secondo, mentre il secondo valore prende la posizione del primo. Se il primo valore è minore del secondo, non avviene alcuno scambio.ping è fatta.

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 il problema che risolve, la sua forma ottimizzata, una guida visiva passo passo, un funzionamento Python programma e le sue caratteristiche prestazionali.

L'implementazione di Bubble Algoritmo di ordinamento

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

Il problema

Viene fornito un elenco di elementi in ordine casuale e vorremmo disporli in modo ordinato.

Considerate il seguente elenco:

[21, 6, 9, 33, 3]

La soluzione

Scorri la lista confrontando due elementi adiacenti e scambialiping se il primo valore è maggiore del secondo valore.

Il risultato dovrebbe essere il seguente:

[3, 6, 9, 21, 33]

Algoritmo

L'algoritmo di ordinamento a bolle funziona nel seguente modo:

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

Passo 2) Determinare il numero di passaggi esterni (n – 1) da eseguire. La sua lunghezza è list meno uno.

Passo 3) Eseguire passaggi interni (n – 1) volte per il passaggio esterno 1. Ottenere il valore del primo elemento e confrontarlo con il secondo valore. Se il secondo valore è minore del primo, scambiare le posizioni.

Passo 4) Ripeti il ​​passaggio 3 fino a raggiungere il passaggio più esterno (n – 1). Prendi l'elemento successivo nell'elenco, quindi ripeti il ​​processo eseguito al passaggio 3 finché tutti i valori non saranno stati disposti nel loro corretto ordine crescente.

Passo 5) Restituisci il risultato al termine di tutti i passaggi. Restituisci i risultati dell'elenco ordinato.

Passo 6) Ottimizzazione dell'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 effettuata seguendo questi passaggi:

Passo 1) Crea una variabile flag che monitora se c'è uno scambioping si è verificato nel ciclo interno.

Passo 2) Se i valori si sono scambiati di posizione, procedere all'iterazione successiva.

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

Un bubble sort ottimizzato è più efficiente poiché esegue solo i passaggi necessari e salta quelli non richiesti.

Rappresentazione visiva

Data una lista di cinque elementi, le immagini seguenti illustrano come l'algoritmo di ordinamento a bolle scorre i valori durante l'ordinamento.

L'immagine seguente mostra l'elenco non ordinato:

Bubble Ordina elenco non ordinato

Prima iterazione

Passo 1)

Bubble Ordina confrontando 21 e 6

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

Bubble Ordina scambioping 21 e 6

21 è maggiore di 6, quindi 21 prende la posizione occupata da 6 mentre 6 prende la posizione che era occupata da 21.

BubblOrdina l'elenco modificato dopo lo scambio

Il nostro elenco modificato ora assomiglia a quello sopra.

Passo 2)

Bubble Ordina confrontando 21 e 9

I valori 21 e 9 vengono confrontati.

Bubble Ordina scambioping 21 e 9

21 è maggiore di 9, quindi scambiamo le posizioni di 21 e 9.

Bubble Ordina la nuova lista dopo lo scambio

Il nuovo elenco è ora quello sopra indicato.

Passo 3)

Bubble Ordina confrontando 21 e 33

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

Bubble Ordina 33 maggiore di 21 nessuno scambio

Il valore 33 è maggiore di 21, quindi non c'è scambioping si svolge.

Passo 4)

Bubble Ordina confrontando 33 e 3

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

Bubble Ordina scambioping 33 e 3

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

Bubble Ordina la lista ordinata dopo la prima iterazione

L'elenco ordinato al termine della prima iterazione è simile a quello sopra.

Seconda iterazione

Il nuovo elenco dopo la seconda iterazione è il seguente:

BubblOrdina la lista dopo la seconda iterazione

Terza iterazione

Il nuovo elenco dopo la terza iterazione è il seguente:

BubblOrdina la lista dopo la terza iterazione

Quarta iterazione

Il nuovo elenco dopo la quarta iterazione è il seguente:

Bubble Ordina la lista completamente ordinata dopo la quarta iterazione

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:

[3, 6, 9, 21, 33]

Code Spiegazione

La spiegazione per il Python BubblIl codice del programma di ordinamento è il seguente:

Bubble Ordina Python spiegazione del codice

QUI,

  1. Definisce una funzione bubbleSort che accetta un parametro theSeq. Il codice non restituisce nulla.
  2. Recupera la lunghezza dell'array e assegna il valore a una variabile n. Il codice non produce alcun output.
  3. Avvia un ciclo for che esegue l'algoritmo di ordinamento a bolle (n – 1) volte. Questo è il ciclo esterno. Il codice non produce alcun output.
  4. Definisce una variabile flag che verrà utilizzata per determinare se si è verificato uno scambio o meno. Questo serve a fini di ottimizzazione. Il codice non produce alcun output.
  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 produce alcun output.
  8. Il valore di theSeq[j + 1] viene assegnato alla posizione di theSeq[j]. Il codice non produce alcun output.
  9. Il valore della variabile tmp viene assegnato alla posizione theSeq[j + 1]. Il codice non produce alcun output.
  10. Alla variabile flag viene assegnato il valore 1 per indicare che è avvenuto uno scambio. Il codice non produce alcun output.
  11. Utilizza un'istruzione if per verificare se il valore della variabile flag è 0. Il codice non produce alcun output.
  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 elencati alcuni dei vantaggi dell'algoritmo di ordinamento a bolle:

  • È facile da capire
  • Funziona molto bene quando l'elenco è già ordinato o quasi.
  • 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 elencati alcuni degli svantaggi dell'algoritmo di ordinamento a bolle:

  • Non funziona bene quando si ordinano elenchi di grandi dimensioni. Ci vuole troppo tempo e risorse.
  • Viene utilizzato principalmente a fini accademici e non per applicazioni pratiche 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à dell'ordinamento viene utilizzata per esprimere la quantità di tempo di esecuzione e di spazio necessari per ordinare la lista. L'algoritmo Bubble Sort effettua (n – 1) iterazioni per ordinare la lista, dove n è il numero totale di elementi nella lista.

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 – ciò si verifica 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à dello spazio misura la quantità di spazio extra necessaria per ordinare la lista. L'ordinamento a bolle richiede solo uno (1) spazio extra per la variabile temporale utilizzata per lo scambioping valori. Pertanto, ha una complessità spaziale di O(1).

DOMANDE FREQUENTI

BubblL'algoritmo di ordinamento viene raramente utilizzato negli ambienti di produzione dell'IA, ma è utile per apprendere la logica di ordinamento alla base della preparazione dei dati. Le pipeline di machine learning ordinano caratteristiche, punteggi e previsioni utilizzando algoritmi più veloci, mentre l'ordinamento a bolle chiarisce il concetto di confronto e scambio per i principianti.

Sì. Gli assistenti IA possono scrivere bubble sort in Python, Java, o C++ e aggiungono l'ottimizzazione del flag che interrompe l'elaborazione in anticipo su un elenco ordinato. Possono anche suggerire algoritmi più veloci quando il set di dati diventa grande.

Si chiama ordinamento a bolle perché i valori più grandi gradualmente "salgono" verso la fine della lista a ogni passaggio, proprio come le bolle d'aria che salgono in superficie, mentre i valori più piccoli affondano verso l'inizio.

BubblL'algoritmo esort ha un tempo di esecuzione O(n²), che è molto più lento di quicksort e merge sort, entrambi con un tempo di esecuzione O(n log n). BubblL'algoritmo esort è adatto a piccoli esempi o a scopo didattico, mentre quicksort e mergesort gestiscono in modo efficiente grandi insiemi di dati reali.

Riassumi questo post con: