Просто малоймовірно об'єднати Сортувати , QuickSort — це a розділяй і володарюй алгоритм . Він вибирає елемент як опору та розбиває заданий масив навколо вибраної опори.
Існує багато різних версій QuickSort, які вибирають зведення різними способами.
висота зсуву
- Завжди вибирайте перший елемент як опору
- Завжди вибирайте останній елемент як опору
- Виберіть випадковий елемент як опору
- Виберіть медіану як опору
Тут ми виберемо останній елемент як опору. Ключовим процесом у QuickSort є partition(). Ціль розділів полягає в тому, що, враховуючи масив і елемент 'x' масиву як опору, помістити x у правильну позицію в сортованому масиві та розмістити всі менші елементи (менші за x) перед x, а також розмістити всі більші елементи (більші ніж x) після x. Все це повинно бути зроблено в лінійний час.
Python Рекурсивне швидке сортування функція
// low -->Початковий індекс, // високий --> Кінцевий індекс quickSort(arr[], low, high) { // Поки початковий індекс буде меншим за кінцевий індекс if (низький // pi – індекс розбиття, // arr[p] зараз у правильному місці pi = partition(arr, low, high); // Перед pi quickSort(arr, low, pi - 1); // Після 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)> |
>
>
до рядкового методу javaВихід
Unsorted Array [1, 7, 4, 1, 10, 9, -2] Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Часова складність: Часова складність у найгіршому випадку становить O(N2), а середня складність випадку становить O(N log N)
Допоміжний простір: О(1)
Використання Python Quicksort розуміння списку
Швидке сортування з використанням розуміння списку — це рекурсивний алгоритм для сортування масиву елементів. Він працює шляхом вибору опорного елемента та розбиття масиву навколо опорної точки таким чином, що всі елементи, менші за опорну, переміщуються ліворуч, а всі елементи, більші за опорну, переміщуються праворуч. Потім він рекурсивно застосовує той самий процес до лівого та правого підмасивів, доки весь масив не буде відсортовано.
Алгоритм:
1. Якщо вхідний масив має довжину 0 або 1, поверніть масив, оскільки він уже відсортований.
2. Виберіть перший елемент масиву як опорний.
3. Створіть два порожніх списки, ліворуч і праворуч.
4. Для кожного елемента в масиві, крім опорної точки:
a. Якщо елемент менший за опору, додайте його до лівого списку.
b. Якщо елемент більше або дорівнює опорній точці, додайте його до правого списку.
5. Рекурсивно викликати швидке сортування в лівому та правому списках.
6. Об’єднайте відсортований лівий список, зведений елемент і відсортований правий список.
7.Повернути об’єднаний список.
ой концепція в java
Python3
# 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) # Приклад використання arr = [1, 7, 4, 1, 10, 9, -2] sorted_arr = quicksort(arr) print('Sorted Array у порядку зростання:') print(sorted_arr)> |
>
тестування продуктивності
>Вихід
Sorted Array in Ascending Order: [-2, 1, 1, 4, 7, 9, 10]>
Часова складність O(n log n)
Просторова складність алгоритму дорівнює O(n)