logo

Program Python pre QuickSort

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.

  1. Vždy vyberte prvý prvok ako pivot
  2. Vždy vyberte posledný prvok ako pivot
  3. Vyberte náhodný prvok ako pivot
  4. 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)