Aprèn a utilitzar la funció Python Sort per ordenar llistes, matrius, diccionaris, etc. utilitzant diversos mètodes i algorismes d'ordenació a Python:
L'ordenació és una tècnica que s'utilitza per ordenar les dades en ordre de seqüència, ja sigui en ordre ascendent o descendent.
La majoria de les vegades les dades dels grans projectes no s'organitzen en l'ordre correcte i això crea problemes per accedir i obtenir les dades requerides de manera eficient.
S'utilitzen tècniques d'ordenació per resoldre aquest problema. Python ofereix diverses tècniques d'ordenació per exemple, Ordenació de bombolles, ordenació per inserció, ordenació per combinació, ordenació ràpida, etc.
En aquest tutorial, entendrem com funciona l'ordenació a Python mitjançant diversos algorismes.
Python Sort
Sintaxi de Python Sort
Per fer l'ordenació, Python proporciona la funció integrada, és a dir, la funció "sort()". S'utilitza per ordenar els elements de dades d'una llista en ordre ascendent o descendent.
Entenguem aquest concepte amb un exemple.
Exemple 1:
``` a = [ 3, 5, 2, 6, 7, 9, 8, 1, 4 ] a.sort() print( “ List in ascending order: ”, a ) ```
Sortida:
En aquest exemple, la llista no ordenada donada s'ordena en ordre ascendent mitjançant la funció “sort() ” .
Exemple 2:
``` a = [ 3, 5, 2, 6, 7, 9, 8, 1, 4 ] a.sort( reverse = True ) print( “ List in descending order: ”, a ) ```
Sortida
A l'exemple anterior, la llista no ordenada donada s'ordena en ordre invers mitjançant la funció “sort(reverse = True)”.
Tempslloc Ordenació de bombolles O(n) O(n2) O(n2) O(1) Sí Sí Ordenació d'inserció O(n) O(n2) O(n2) O(1) Sí Sí Ordenació ràpida O(n log(n)) O(n log(n)) O(n2) O(N) No Sí Combina ordena O(n log(n)) O(n log(n)) O(n log(n)) O(N) Sí No Ordenació de pila O(n log (n)) O(n log(n)) O(n log(n)) O(1) No Sí
A la taula de comparació anterior, " O " és la notació Big Oh explicada anteriorment, mentre que " n " i " N " signifiquen la mida de l'entrada .
Preguntes freqüents
P #1) Què és sort () a Python?
Resposta: A Python sort() és una funció que s'utilitza per ordenar les llistes o matrius en un ordre específic. Aquesta funció facilita el procés d'ordenació mentre es treballa en projectes grans. És molt útil per als desenvolupadors.
P #2) Com ho ordeneu a Python?
Resposta: Python proporciona diverses tècniques d'ordenació que s'utilitzen per ordenar l'element. Per exemple, Ordenació ràpida, ordenació combinada, ordenació bombolla, ordenació per inserció, etc. Totes les tècniques d'ordenació són eficients i fàcils d'entendre.
Q #3) Com funciona Python ordenar () treballar?
Resposta: L'ordenació ()La funció pren la matriu donada com a entrada de l'usuari i l'ordena en un ordre específic mitjançant l'algorisme d'ordenació. La selecció de l'algorisme depèn de l'elecció de l'usuari. Els usuaris poden utilitzar l'ordenació ràpida, l'ordenació per combinació, l'ordenació per bombolla, l'ordenació per inserció, etc., depenent de les necessitats de l'usuari.
Conclusió
En el tutorial anterior, vam parlar de la tècnica d'ordenació a Python juntament amb la tècniques d'ordenació generals.
- Ordenació de bombolles
- Ordenació d'inserció
- Ordenació ràpida
Vam conèixer la seva complexitat i avantatges temporals i amp; desavantatges. També hem comparat totes les tècniques anteriors.
Complexitat dels algorismes d'ordenacióTemps La complexitat és la quantitat de temps que triga l'ordinador a executar un algorisme concret. Té tres tipus de casos de complexitat temporal.
- Pitjor cas: Temps màxim que triga l'ordinador a executar el programa.
- Cas mitjà: Temps que triga l'ordinador entre el mínim i el màxim per executar el programa.
- Millor cas: Temps mínim que triga l'ordinador a executar el programa. És el millor cas de complexitat temporal.
Notacions de complexitat
Notació Big Oh, O: La notació Big oh és la manera oficial de transmetre el límit superior del temps d'execució dels algorismes. S'utilitza per mesurar la complexitat del temps en el pitjor dels casos o diem que la major quantitat de temps que triga l'algorisme a completar-se.
Notació omega gran, : La notació omega gran és la forma oficial de transmetre el límit inferior del temps d'execució dels algorismes. S'utilitza per mesurar la complexitat del temps en el millor dels casos o diem l'excel·lent quantitat de temps que triga l'algorisme.
Notació Theta, : La notació Theta és la manera oficial de transmetre ambdós límits, és a dir, inferior i superior del temps que triga l'algorisme a completar-se.
Mètodes d'ordenació en Python
Ordenació de bombolles
L'ordenació de bombolles és la manera més senzilla d'ordenar les dades que utilitza la tècnica de la força bruta. Iterarà cada element de dades i el compararà amb altres elementsper proporcionar a l'usuari les dades ordenades.
Agafem un exemple per entendre aquesta tècnica:
- Ens proporciona una matriu que té els elements “ 10, 40, 7, 3, 15”. Ara, hem d'organitzar aquesta matriu en ordre ascendent mitjançant la tècnica d'ordenació de bombolles a Python.
- El primer pas és organitzar la matriu en l'ordre donat.
- A la "Iteració 1", estem comparant el primer element d'una matriu amb els altres elements un per un.
- Les fletxes vermelles descriuen la comparació dels primers elements amb la resta d'elements d'una matriu.
- Si observeu que "10" és més petit que "40", per tant, es manté igual. lloc però el següent element " 7 " és més petit que " 10 ". Per tant, es substitueix i arriba al primer lloc.
- El procés anterior es realitzarà una i altra vegada per ordenar els elements.
-
- A la "Iteració 2", el segon element es compara amb els altres elements d'una matriu.
- Si l'element comparat és petit, llavors serà es substitueix, en cas contrari romandrà al mateix lloc.
-
- A la " Iteració 3 " el tercer element es compara amb els altres elements d'una matriu.
-
- En l'últim " Iteració 4 " l'últim element es compara amb els altres elements d'una matriu.
- Aaquest pas, la matriu s'ordena en ordre ascendent.
Programa per a l'ordenació de bombolles
``` def Bubble_Sort(unsorted_list): for i in range(0,len(unsorted_list)-1): for j in range(len(unsorted_list)-1): if(unsorted_list[j]>unsorted_list[j+1]): temp_storage = unsorted_list[j] unsorted_list[j] = unsorted_list[j+1] unsorted_list[j+1] = temp_storage return unsorted_list unsorted_list = [5, 3, 8, 6, 7, 2] print("Unsorted List: ", unsorted_list) print("Sorted List using Bubble Sort Technique: ", Bubble_Sort(unsorted_list)) ```
Sortida
Complexitat temporal de l'ordenació de bombolles
- El pitjor dels casos: La pitjor complexitat de temps per a l'ordenació de bombolles és O( n 2).
- Cas mitjà: La complexitat mitjana de temps per a l'ordenació de bombolles és O( n 2).
- Millor cas: La millor complexitat temporal per a l'ordenació de bombolles és O(n).
Avantatges
- S'utilitza principalment i és fàcil d'implementar.
- Podem intercanviar els elements de dades sense consumir emmagatzematge a curt termini.
- Requereix menys espai.
Inconvenients
- No va funcionar bé mentre es tractava amb un gran nombre d'elements de dades grans.
- És necessita n 2 passos per a cada "n" nombre d'elements de dades per ordenar-se.
- No és realment bo per a aplicacions del món real.
Inserció Ordenar
L'ordenació per inserció és una tècnica d'ordenació senzilla i senzilla que funciona de manera semblant a l'ordenació de les cartes. L'ordenació per inserció ordena els elements comparant cada element un per un amb l'altre. Els elements es seleccionen i s'intercanvien amb l'altre element si l'element és més gran o més petit que l'altre.
Prenguem un exemple
- Ens proporcionen una matriu que té els elements " 100, 50, 30, 40, 10 ".
- Primer, organitzem la matriu i comencem a comparar
- En el primer pas es compara “100” amb el segon element “50”. " 50 " s'intercanvia amb " 100 " ja que és més gran.
- En el segon pas, novament el segon element "100 " es compara amb el tercer element " 30 " i s'intercanvia.
- Ara, si observeu que "30" arriba al primer lloc perquè torna a ser més petit que "50".
- La comparació es produirà fins a l'últim element d'una matriu i al final, obtindrem el dades ordenades.
Programa d'ordenació per inserció
``` def InsertionSort(array): for i in range(1, len(array)): key_value = array[i] j = i-1 while j >= 0 and key_value array[j] : array[j + 1] = array[j] j -= 1 array[j + 1] = key_value array = [11, 10, 12, 4, 5] print("The unsorted array: ", array) InsertionSort(array) print ("The sorted array using the Insertion Sort: ") for i in range(len(array)): print (array[i]) ```
Sortida
Complexitat temporal de l'ordenació per inserció
- Pitjor cas: La pitjor complexitat temporal per a l'ordenació per inserció és O( n 2).
- Cas mitjà: La complexitat mitjana del temps per a l'ordenació per inserció és O( n 2).
- Millor cas: La millor complexitat temporal per a l'ordenació d'inserció és O(n).
Avantatges
- És senzill i fàcil d'implementar.
- Fun bon rendiment mentre es tracta d'un nombre reduït d'elements de dades.
- No necessita més espai per a la seva implementació.
Inconvenients
- No és útil ordenar un gran nombre d'elements de dades.
- En comparació amb altres tècniques d'ordenació, no funciona bé.
Ordenació per combinació
Aquest mètode d'ordenació utilitza el mètode de dividir i guanyar per ordenar els elements en un ordre específic. Mentre s'ordena amb l'ajuda de l'ordenació de combinació, elels elements es divideixen en meitats i després es classifiquen. Després d'ordenar totes les meitats, els elements es tornen a unir per formar un ordre perfecte.
Prenguem un exemple per entendre aquesta tècnica
- Ens proporcionen una matriu "7, 3, 40, 10, 20, 15, 6, 5". La matriu conté 7 elements. Si el dividim per la meitat ( 0 + 7 / 2 = 3 ).
- En el segon pas, veureu que els elements es divideixen en dues parts. Cadascun té 4 elements.
- A més, els elements es tornen a dividir i tenen 2 elements cadascun.
- Aquest procés continuarà fins que només hi hagi un element en una matriu. Consulteu el pas núm. 4 de la imatge.
- Ara, ordenarem els elements i començarem a unir-los tal com estàvem dividits.
- Al pas núm. 5 si observeu que 7 és més gran que 3, així que els intercanviarem i els unirem en el pas següent i viceversa.
- Al final, notareu que la nostra matriu s'ordena en ordre ascendent.
Programa per a l'ordenació de combinacions
``` def MergeSort(arr): if len(arr) > 1: middle = len(arr)//2 L = arr[:middle] R = arr[middle:] MergeSort(L) MergeSort(R) i = j = k = 0 while i len(L) and j len(R): if L[i] R[j]: arr[k] = L[i] i += 1 else: arr[k] = R[j] j += 1 k += 1 while i len(L): arr[k] = L[i] i += 1 k += 1 while j len(R): arr[k] = R[j] j += 1 k += 1 def PrintSortedList(arr): for i in range(len(arr)): print(arr[i],) print() arr = [12, 11, 13, 5, 6, 7] print("Given array is", end="\n") PrintSortedList(arr) MergeSort(arr) print("Sorted array is: ", end="\n") PrintSortedList(arr) ```
Sortida
Complexitat temporal de l'ordenació per fusió
- Pitjor cas: La pitjor complexitat temporal per a l'ordenació per fusió és O( n log( n )).
- Cas mitjà: La complexitat mitjana del temps per a l'ordenació de la combinació és O( n log( n )).
- Millor cas: La millor complexitat temporal per a l'ordenació de combinació és O( n log( n )).
Avantatges
- La mida del fitxer no importa per a aquesta tècnica d'ordenació.
- Aquesta tècnica és bona per a les dades a les quals s'accedeix generalment en un ordre de seqüència. Per exemple, llistes enllaçades, unitat de cinta, etc.
Inconvenients
- Requereix més espai en comparació amb altres tècniques d'ordenació.
- És comparativament menys eficient que altres.
Ordenació ràpida
L'ordenació ràpida torna a utilitzar el mètode divideix i venç per ordenar els elements d'una llista. o una matriu. Orienta els elements pivotants i ordena els elements segons l'element pivot seleccionat.
Per exemple
- Ens proporciona una matriu amb els elements “ 1 ,8,3,9,4,5,7 ”.
- Suposem que “7” és un element pilot.
- Ara dividirem la matriu de tal manera que el El costat esquerre conté els elements que són més petits que l'element de pivot " 7 " i el costat dret conté els elements més grans que l'element de pivot " 7 ".
- Ara tenim dues matrius " 1,3,4,5". ” i “ 8, 9 ” .
- De nou, hem de dividir les dues matrius de la mateixa manera que hem fet anteriorment. L'única diferència és que els elements pivot es canvien.
- Hem de dividir les matrius fins que aconseguim l'element únic a la matriu.
- Al final, recull tots els elements pivot en un seqüència d'esquerra a dreta i obtindreu l'ordenaciómatriu.
Programa per a l'ordenació ràpida
``` def Array_Partition( arr, lowest, highest ): i = ( lowest-1 ) pivot_element = arr[ highest ] for j in range( lowest, highest ): if arr[ j ] = pivot_element: i = i+1 arr[ i ], arr[ j ] = arr[ j ], arr[ i ] arr[ i+1 ], arr[ highest ] = arr[ highest ], arr[ i+1 ] return ( i+1 ) def QuickSort( arr, lowest, highest ): if len( arr ) == 1: return arr if lowest highest: pi = Array_Partition( arr, lowest, highest ) QuickSort( arr, lowest, pi-1 ) QuickSort( arr, pi+1, highest ) arr = [ 9, 6, 7, 8, 0, 4 ] n = len( arr ) print( " Unsorted array: ", arr ) QuickSort( arr, 0, n-1 ) print( " Sorted array using Quick Sort: " ) for i in range( n ): print( " %d " % arr[ i ] ) ```
Sortida
Complexitat temporal de l'ordenació ràpida
- El pitjor dels casos: La pitjor complexitat temporal de l'ordenació ràpida és O( n 2).
- Cas mitjà: la complexitat mitjana del temps per a l'ordenació ràpida és O( n log( n ) ).
- Millor cas: La millor complexitat temporal per a l'ordenació ràpida és O( n log( n )).
Avantatges
- És conegut com el millor algorisme d'ordenació de Python.
- És útil quan es maneja una gran quantitat de dades.
- No requereix espai addicional.
Inconvenients
- La seva complexitat en el pitjor dels casos és similar a la complexitat de la classificació de bombolles i ordenació per inserció.
- Aquest mètode d'ordenació no és útil quan ja tenim la llista ordenada.
Ordenació munt
Ordenació munt és la versió avançada de l'arbre de cerca binari . En l'ordenació munt, l'element més gran d'una matriu es col·loca a l'arrel de l'arbre sempre i després, en comparació amb l'arrel amb els nodes fulla.
Per exemple:
- Ens proporciona una matriu amb els elements “ 40, 100, 30, 50, 10 ” .
- A “ pas 1 ” hem fet un arbre segons el presència dels elements a la matriu.
- A “ pas 2 ” estem fent un munt màxim, és a dir, per organitzar el elements en ordre descendent. L'element més gran seràresideix a la part superior (arrel) i l'element més petit resideix a la part inferior (nodes de fulla). La matriu donada es converteix en " 100, 50, 30, 40, 10 ".
- A " pas 3 " , estem fent el munt mínim perquè puguem trobar els elements mínims d'una matriu. Fent això, obtenim els elements màxim i mínim.
- A “ pas 4 ” fent els mateixos passos. obtenim la matriu ordenada.
Programa per a l'ordenació de pila
``` def HeapSortify( arr, n, i ): larger_element = i left = 2 * i + 1 right = 2 * i + 2 if left n and arr[ larger_element ] arr[ left ]: larger_element = left if right n and arr[ larger_element ] arr[ right ]: larger_element = right if larger_element != i: arr[ i ], arr[ larger_element ] = arr[ larger_element ], arr[ i ] HeapSortify( arr, n, larger_element ) def HeapSort( arr ): n = len( arr ) for i in range( n//2 - 1, -1, -1 ): HeapSortify( arr, n, i ) for i in range( n-1, 0, -1 ): arr[ i ], arr[ 0 ] = arr[ 0 ], arr[ i ] HeapSortify( arr, i, 0 ) arr = [ 11, 10, 12, 4, 5, 6 ] print( " The unsorted array is: ", arr ) HeapSort( arr ) n = len( arr ) print( " The sorted array sorted by the Heap Sort: " ) for i in range( n ): print( arr[ i ] ) ```
Sortida
Complexitat temporal de l'ordenació munt
- El pitjor cas: La pitjor complexitat temporal per a l'ordenació munt és O( n log( n )).
- Cas mitjà: La complexitat mitjana del temps per a l'ordenació de pila és O( n log( n )).
- Millor cas: La millor complexitat temporal per a l'ordenació de pila és O( n log( n )).
Avantatges
- S'utilitza principalment per la seva productivitat.
- Pot s'implementarà com un algorisme local.
- No requereix un emmagatzematge gran.
Inconvenients
- Necessita espai per a ordenant els elements.
- Fa l'arbre per ordenar els elements.
Comparació entre les tècniques d'ordenació
Mètode d'ordenació | Complexitat del temps del millor cas | Complexitat del temps del cas mitjà | Complexitat del temps del pitjor cas | Complexitat de l'espai | Estabilitat | En - |
---|