logo

Program Python pro QuickSort

Jen nepravděpodobné Sloučit třídění , QuickSort je a algoritmus rozděl a panuj . Vybere prvek jako pivot a rozdělí dané pole kolem vybraného pivotu.

Existuje mnoho různých verzí quickSort, které vybírají pivot různými způsoby.



  1. Vždy vyberte první prvek jako pivot
  2. Vždy vyberte poslední prvek jako pivot
  3. Vyberte náhodný prvek jako pivot
  4. Vyberte medián jako pivot

Zde vybereme poslední prvek jako pivot. Klíčovým procesem v quickSortu je partition(). Cílem oddílů je, když je dáno pole a prvek „x“ pole jako pivot, umístit x na správnou pozici v seřazeném poli a všechny menší prvky (menší než x) umístit před x a všechny větší prvky (větší než x) po x. To vše by mělo být provedeno v lineárním čase.

Krajta Rekurzivní QuickSort funkce

// low -->Počáteční index, // vysoký --> Koncový index quickSort(arr[], nízký, vysoký) { // Dokud nebude počáteční index nižší než koncový index if (nízké // pi je index rozdělení, // arr[p] je nyní na správném místě pi = partition(arr, low, high) // Před pi quickSort(arr, low, pi - 1); // Po pi quickSort(arr, pi + 1, high); 

Python3

znak na řetězec java








# 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)>

java int jako řetězec

>

Výstup

seriál v postgresu
Unsorted Array [1, 7, 4, 1, 10, 9, -2] Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>

Časová náročnost: Časová složitost v nejhorším případě je O(N2) a průměrná časová složitost případu je O(N log N)
Pomocný prostor: O(1)

Pomocí Pythonu Quicksort porozumění seznamu

Quicksort využívající porozumění seznamu je rekurzivní algoritmus pro třídění pole prvků. Funguje tak, že se vybere otočný prvek a rozdělí pole kolem otočného bodu tak, že všechny prvky menší než otočný bod se přesunou doleva a všechny prvky větší než otočný bod se přesunou doprava. Poté rekurzivně aplikuje stejný proces na levé a pravé podpole, dokud není celé pole seřazeno.

Algoritmus:

1.Pokud má vstupní pole délku 0 nebo 1, vraťte pole tak, jak je již seřazeno.
2. Vyberte první prvek pole jako prvek pivotu.
3. Vytvořte dva prázdné seznamy, levý a pravý.
4. Pro každý prvek v poli kromě pivotu:
A. Pokud je prvek menší než pivot, přidejte jej do levého seznamu.
b. Pokud je prvek větší nebo roven pivotu, přidejte jej do správného seznamu.
5.Rekurzivně volejte rychlé třídění na levém a pravém seznamu.
6. Spojte seřazený levý seznam, kontingenční prvek a seřazený pravý seznam.
7.Vraťte zřetězený seznam.

Python3

co je zásobník v Javě




# 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(left) + [pivot] + quicksort(right) # Příklad použití arr = [1, 7, 4, 1, 10, 9, -2] sort_arr = quicksort(arr) print('Sorted Array ve vzestupném pořadí:') print(sorted_arr)>

>

algoritmy binární vyhledávání

>

Výstup

Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>

Časová složitost je O(n log n)

Prostorová složitost algoritmu je O(n)