Len nepravdepodobné zlúčiť Zoradiť , QuickSort je a algoritmus rozdeľ a panuj . Vyberie prvok ako pivot a rozdelí dané pole okolo vybraného pivotu.
Existuje mnoho rôznych verzií quickSort, ktoré vyberajú pivot rôznymi spôsobmi.
- Vždy vyberte prvý prvok ako pivot
- Vždy vyberte posledný prvok ako pivot
- Vyberte náhodný prvok ako pivot
- Vyberte medián ako pivot
Tu vyberieme posledný prvok ako pivot. Kľúčovým procesom v quickSort je partition(). Cieľom oddielov je, ak je dané pole a prvok „x“ poľa ako pivot, umiestniť x na správnu pozíciu v zoradenom poli a všetky menšie prvky (menšie ako x) umiestniť pred x a všetky väčšie prvky (väčšie než x) po x. To všetko by sa malo uskutočniť v lineárnom čase.
Python Rekurzívny QuickSort funkciu
// low -->Počiatočný index, // vysoký --> Koncový index quickSort(arr[], low, high) { // Kým počiatočný index nebude menší ako koncový index if (nízke // pi je index rozdelenia, // arr[p] je teraz na správnom mieste pi = partition(arr, low, high // Pred pi quickSort(arr, low, pi - 1); // Po pi quickSort(arr, pi + 1, high); Python3
# 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)> |
>Výkon
Unsorted Array [1, 7, 4, 1, 10, 9, -2] Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Časová zložitosť: Časová zložitosť v najhoršom prípade je O(N2) a priemerná časová zložitosť prípadu je O(N log N)
Pomocný priestor: O(1)
Pomocou Pythonu Quicksort porozumenie zoznamu
Rýchle triedenie pomocou porozumenia zoznamu je rekurzívny algoritmus na triedenie poľa prvkov. Funguje tak, že vyberiete prvok otočného bodu a rozdelíte pole okolo čapu tak, že všetky prvky menšie ako otočný bod sa presunú doľava a všetky prvky väčšie ako otočný prvok sa presunú doprava. Potom rekurzívne aplikuje rovnaký proces na ľavé a pravé podpole, kým nie je zoradené celé pole.
Algoritmus:
1.Ak má vstupné pole dĺžku 0 alebo 1, vráťte pole tak, ako je už zoradené.
2.Vyberte prvý prvok poľa ako prvok pivot.
3. Vytvorte dva prázdne zoznamy, vľavo a vpravo.
4. Pre každý prvok v poli okrem pivota:
a. Ak je prvok menší ako pivot, pridajte ho do ľavého zoznamu.
b. Ak je prvok väčší alebo rovný pivotu, pridajte ho do správneho zoznamu.
5.Rekurzívne volajte rýchle triedenie na ľavom a pravom zozname.
6. Spojte zoradený ľavý zoznam, kontingenčný prvok a zoradený pravý zoznam.
7.Vráťte zreťazený zoznam.
Python3
np.nuly
# 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] return quicksort(vľavo) + [pivot] + quicksort(right) # Príklad použitia arr = [1, 7, 4, 1, 10, 9, -2] sorted_arr = quicksort(arr) print('Sorted Array vo vzostupnom poradí:') print(sorted_arr)> |
>
>Výkon
Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Časová zložitosť je O(n log n)
Priestorová zložitosť algoritmu je O(n)