Simplement poc probable combinar Ordenar , QuickSort és un algorisme de dividir i conquerir . Tria un element com a pivot i particiona la matriu donada al voltant del pivot triat.
Hi ha moltes versions diferents de quickSort que trien el pivot de diferents maneres.
- Trieu sempre el primer element com a pivot
- Trieu sempre l'últim element com a pivot
- Trieu un element aleatori com a pivot
- Trieu la mitjana com a pivot
Aquí escollirem l'últim element com a pivot. El procés clau de quickSort és partition(). L'objectiu de les particions és, donada una matriu i un element 'x' de la matriu com a pivot, posar x a la seva posició correcta en una matriu ordenada i posar tots els elements més petits (menys que x) abans de x, i posar tots els elements més grans (més grans). que x) després de x. Tot això s'ha de fer en temps lineal.
llista d'enllaços java
Python QuickSort recursiu funció
// low -->Índex inicial, // alt --> Índex final quickSort(arr[], baix, alt) { // Fins que l'índex inicial sigui menor que l'índex final si (baix // pi és índex de partició, // arr[p] és ara al lloc correcte pi = partició(arr, baix, alt); Python 3
# Python program for implementation of Quicksort Sort> # This implementation utilizes pivot as the last element in the nums list> # It has a pointer to keep track of the elements smaller than the pivot> # At the very end of partition() function, the pointer is swapped with the pivot> # to come up with a 'sorted' nums relative to the pivot> # Function to find the partition position> def> partition(array, low, high):> ># choose the rightmost element as pivot> >pivot>=> array[high]> ># pointer for greater element> >i>=> low>-> 1> ># traverse through all elements> ># compare each element with pivot> >for> j>in> range>(low, high):> >if> array[j] <>=> pivot:> ># If element smaller than pivot is found> ># swap it with the greater element pointed by i> >i>=> i>+> 1> ># Swapping element at i with element at j> >(array[i], array[j])>=> (array[j], array[i])> ># Swap the pivot element with the greater element specified by i> >(array[i>+> 1>], array[high])>=> (array[high], array[i>+> 1>])> ># Return the position from where partition is done> >return> i>+> 1> # function to perform quicksort> def> quickSort(array, low, high):> >if> low # Find pivot element such that # element smaller than pivot are on the left # element greater than pivot are on the right pi = partition(array, low, high) # Recursive call on the left of pivot quickSort(array, low, pi - 1) # Recursive call on the right of pivot quickSort(array, pi + 1, high) data = [1, 7, 4, 1, 10, 9, -2] print('Unsorted Array') print(data) size = len(data) quickSort(data, 0, size - 1) print('Sorted Array in Ascending Order:') print(data)> |
>Sortida
llista java buida
Unsorted Array [1, 7, 4, 1, 10, 9, -2] Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Complexitat temporal: La complexitat temporal del pitjor dels casos és O(N2) i la complexitat mitjana del temps del cas és O(N log N)
Espai auxiliar: O(1)
Python Quicksort utilitzant comprensió de llista
Quicksort mitjançant la comprensió de llistes és un algorisme recursiu per ordenar una matriu d'elements. Funciona seleccionant un element de pivot i particionant la matriu al voltant del pivot, de manera que tots els elements inferiors al pivot es mouen a la seva esquerra i tots els elements més grans que el pivot es mouen a la seva dreta. Aleshores, aplica recursivament el mateix procés a les submatrius esquerra i dreta fins que s'ordena tota la matriu.
Algorisme:
1.Si la matriu d'entrada té una longitud 0 o 1, retorneu la matriu tal com ja està ordenada.
2. Trieu el primer element de la matriu com a element pivot.
3.Creeu dues llistes buides, esquerra i dreta.
4. Per a cada element de la matriu excepte pel pivot:
a. Si l'element és més petit que el pivot, afegiu-lo a la llista de l'esquerra.
b. Si l'element és més gran o igual que el pivot, afegiu-lo a la llista de la dreta.
5.Truqueu recursivament a quicksort a les llistes esquerra i dreta.
6.Concatena la llista esquerra ordenada, l'element pivot i la llista dreta ordenada.
7.Retorna la llista concatenada.
Python 3
# Approach 2: Quicksort using list comprehension> def> quicksort(arr):> >if> len>(arr) <>=> 1>:> >return> arr> >else>:> >pivot>=> arr[>0>]> >left>=> [x>for> x>in> arr[>1>:]>if> x right = [x for x in arr[1:] if x>= pivot] retorna quicksort (esquerra) + [pivot] + quicksort (dreta) # Exemple d'ús arr = [1, 7, 4, 1, 10, 9, -2] sorted_arr = quicksort (arr) print('Matriu ordenat en ordre ascendent:') print(sorted_arr)> |
>
>Sortida
linux que
Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
La complexitat temporal és O(n log n)
La complexitat espacial de l'algorisme és O(n)