Unisci algoritmo di ordinamento usando Python

Unisci algoritmo di ordinamento usando Python
In questo articolo, impareremo a conoscere un algoritmo di tipo di unione. Merge Ord è un popolare metodo di smistamento di divisione e conquista. L'ordinamento di unione è ampiamente utilizzato a causa della sua velocità nell'ordinamento dei dati. È una delle migliori illustrazioni di come dividere e conquistare gli algoritmi che possono essere usati in pratica. L'ordinamento di unione separa un elenco di dati in due metà e quindi, chiama questi sottoparti per dividerli ulteriormente in due metà. Ripete l'operazione fino a quando ogni componente dell'elenco non ha un solo elemento. Ordinando queste sottoparti di un elemento in due componenti, in seguito li unirà insieme. Dopo l'ordinamento, la sottoparte a due elementi sarà collegata agli altri due componenti. Questa procedura viene ripetuta fino a quando non viene ottenuto l'elenco ordinato finale di elementi invocando ripetutamente la funzione.

L'illustrazione di base dell'ordinamento di unione è riportata nel seguente esempio:

Codice Python: Il seguente codice Python è per l'algoritmo di ordinamento:

Def Merge_Sort (UnsortedList):
Se Len (Elsedlist)> 1:
Mid = Len (UnsortedList) // 2
LeftList = UnsortedList [: Mid]
RightList = UnsortedList [Mid:]
# Chiamata ricorsiva quando andiamo a due elenchi (sinistra e destra) per l'ordinamento
Merge_Sort (sinistra)
Merge_Sort (destra)
# Perché abbiamo due elenchi, quindi dobbiamo iteratori per l'iterazione di ogni elenco
M = 0
n = 0
# Abbiamo bisogno di un iteratore comune che itera all'elenco principale
z = 0
mentre m < len(leftList) and n < len(rightList):
Se sinistra [M] <= rightList[n]:
# Qui stiamo usando i primi elementi laterali a sinistra
UnoredList [z] = sinistra [m]
# Incrementa l'iteratore principale
m += 1
altro:
UnoredList [Z] = RightList [N]
n += 1
z += 1
# Se i valori vengono lasciati nell'elenco, allora elaboriamo qui
mentre m < len(leftList):
UnoredList [z] = sinistra [m]
m += 1
z += 1
mentre n < len(rightList):
UnoredList [Z] = RightList [N]
n += 1
z += 1
UNFORTEDLIST = [23,56,0,23,85.100.200,12,32,78,90,102]
Merge_Sort (UnsortedList)
Stampa (list non mobile)

Produzione:

[0, 12, 23, 23, 32, 56, 78, 85, 90, 100, 102, 200]

Questo è il modo ricorsivo per unire l'implementazione dell'ordinamento. Ecco i seguenti passaggi per ottenere l'array ordinato usando questo metodo:

  • Linea 1: Definiamo una funzione (Merge_Sort) quando dobbiamo ordinare un elenco di elementi non mobili. Ora, spiegheremo tutte le righe di questa funzione Merge_Sort.
  • Riga 2-5: La prima cosa che stiamo controllando è se gli elementi dell'elenco non desiderati hanno più di 1 elemento o no. Se c'è un solo singolo elemento, non è necessario ordinare. Quindi, stiamo controllando questa prima condizione.

    Se gli elementi sono più di 1, stiamo cercando di ottenere il valore medio dell'elenco per dividere l'intero elenco in due parti (a sinistra e a destra) per ulteriori chiamate ricorsive. Ogni chiamata ricorsiva divide l'elenco in sinistra e a destra fino a quando non vengono acquisite due voci adiacenti.

  • Riga 8-9: Chiamiamo l'ordinamento di unione in modo ricorsivo per ogni sublist (sinistra e destra).
  • Riga 11-15: La procedura di smistamento ora inizia. Ciascuno chiama due parti che sono attraversate da M e N iteratori. L'iteratore z itera in tutti gli elenchi, apportando modifiche mentre procede.
  • Riga 17-26: La sinistra [m] è assegnata alla slot disfunicata [z] e m sono incrementati se il valore in m è inferiore al valore in n. In caso contrario, viene selezionata la lista di destra [n]. Tutti i valori assegnati a z sono tutti ordinati.
  • Linea 29-37: Alla fine di questo ciclo, una delle parti potrebbe non essere stata completamente incrociata. I suoi contenuti sono assegnati alle posizioni rimanenti nell'elenco.

Complessità temporale:

La complessità temporale del tipo di unione dipende da due fattori:

  • Il fattore di divisione dell'elenco che prende il registro (N)
  • Il secondo fattore unisce l'elenco dei due, che richiede tempo lineare, quindi la sua complessità è O (n)

Pertanto, la complessità totale si basa sui precedenti due fattori dell'ordinamento di unione è O (n.logn).

Vantaggi dell'algoritmo di ordinamento:

  • L'ordinamento di unione rende semplice ordinare i set di big data.
  • L'ordinamento di unione può accedere ai dati in ordine, quindi non è richiesto l'accesso casuale.
  • L'ordinamento di unione è un metodo di smistamento affidabile.

Svantaggi dell'algoritmo di ordinamento:

  • L'ordinamento di unione richiede un array di dimensioni simili per ordinare l'elenco, che è uno svantaggio dell'uso della memoria.
  • Quando si utilizza set di dati più piccoli, ci vuole più tempo.

Conclusione:

L'ordinamento di unione è un metodo di smistamento rapido e versatile. Il suo vantaggio chiave è il costante runtime e l'efficienza dell'algoritmo mentre ordina grandi array. Rispetto a Quick Ord, non si basa su alcun giudizio difettoso che si traduce in lunghi tempi. L'ordinamento di unione è il miglior algoritmo per ordinare gli elementi. Tuttavia, lo svantaggio principale dell'ordinamento di unione è che utilizza molta memoria prima di unire gli elementi. È anche molto utile per la futura ingegneria del software, in cui possono costruire più algoritmi di smistamento in base al metodo Divide-and-Conquer.

Abbiamo visto l'esempio standard dell'ordinamento di unione senza codificare prima per capire come funziona questa analogia, quindi abbiamo implementato passaggi simili nella programmazione di Python. Ora siamo a conoscenza della tecnologia di divisione e conquista del tipo di unione. Speriamo che tu abbia trovato questo articolo utile. Dai un'occhiata al suggerimento di Linux per ulteriori suggerimenti e informazioni.