Bare usannsynlig slå sammen Sorter , QuickSort er en dele og erobre algoritme . Den velger et element som en pivot og deler den gitte matrisen rundt den valgte pivoten.
hvordan finne blokkerte numre på Android
Det er mange forskjellige versjoner av quickSort som velger pivot på forskjellige måter.
- Velg alltid det første elementet som en pivot
- Velg alltid det siste elementet som en pivot
- Velg et tilfeldig element som pivot
- Velg median som en pivot
Her skal vi velge det siste elementet som en pivot. Nøkkelprosessen i quickSort er partisjon(). Målet for partisjoner er, gitt en matrise og et element 'x' av matrisen som en pivot, å sette x i riktig posisjon i en sortert matrise og sette alle mindre elementer (mindre enn x) før x, og sette alle større elementer (større enn x) etter x. Alt dette bør gjøres i lineær tid.
Python Rekursiv QuickSort funksjon
// low -->Startindeks, // høy --> Sluttindeks quickSort(arr[], lav, høy) { // Til startindeksen er mindre enn sluttindeksen hvis (lav // pi er partisjoneringsindeks, // arr[p] er nå på riktig sted pi = partisjon(arr, lav, høy); // Før pi quickSort(arr, lav, pi - 1); 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)> |
hvordan gi nytt navn til en katalog linux
>Produksjon
Unsorted Array [1, 7, 4, 1, 10, 9, -2] Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Tidskompleksitet: Worst case tidskompleksitet er O(N2) og gjennomsnittlig sakstidskompleksitet er O(N log N)
Hjelpeplass: O(1)
Python Quicksort bruker listeforståelse
Quicksort ved hjelp av listeforståelse er en rekursiv algoritme for sortering av en rekke elementer. Det fungerer ved å velge et pivotelement og partisjonere arrayet rundt pivoten, slik at alle elementer mindre enn pivoten flyttes til venstre og alle elementer større enn pivoten flyttes til høyre. Deretter bruker den den samme prosessen rekursivt til venstre og høyre undermatrise til hele matrisen er sortert.
Algoritme:
alfabetet nummer
1.Hvis inndatamatrisen har lengde 0 eller 1, returner matrisen ettersom den allerede er sortert.
2.Velg det første elementet i matrisen som pivotelement.
3. Lag to tomme lister, venstre og høyre.
4.For hvert element i matrisen bortsett fra pivoten:
en. Hvis elementet er mindre enn pivoten, legg det til i listen til venstre.
b. Hvis elementet er større enn eller lik pivoten, legg det til i høyre liste.
5.Rekursivt kall quicksort på venstre og høyre lister.
6.Sett sammen den sorterte venstrelisten, pivotelementet og den sorterte høyrelisten.
7. Returner den sammenkoblede listen.
Python3
primtall java
# 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(venstre) + [pivot] + quicksort(høyre) # Eksempel på bruk arr = [1, 7, 4, 1, 10, 9, -2] sorted_arr = quicksort(arr) print('Sorted Array i stigende rekkefølge:') print(sorted_arr)> |
>
>Produksjon
Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Tidskompleksitet er O(n log n)
Romkompleksiteten til algoritmen er O(n)