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.
- Vždy vyberte první prvek jako pivot
- Vždy vyberte poslední prvek jako pivot
- Vyberte náhodný prvek jako pivot
- 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)