Liknar Sammanfoga sortering algoritmen är Quick Sort-algoritmen en Divide and Conquer-algoritm. Den väljer initialt ett element som ett pivotelement och delar upp den givna arrayen runt den valda pivoten. Det finns många olika versioner av quickSort som väljer pivot på olika sätt.
- Välj alltid det första elementet som en pivot (implementerat nedan).
- Välj alltid det sista elementet som pivot.
- Välj ett slumpmässigt element som en pivot.
- Välj median som en pivot.
Nyckelprocessen i quickSort är partition()-processen. Syftet med funktionen partition() är att ta emot en array och ett element x i arrayen som en pivot, sätta x i sin korrekta position i en sorterad array och sedan sätta alla mindre element (mindre än x) före x, och sätta alla större element (större än x) efter x. Allt detta bör göras i linjär tid, dvs Big O(n) .
Pseudokod för rekursiv QuickSort-funktion:
/* low -->Startindex, hög --> Slutindex */ quickSort(arr[], låg, hög) { if (låg Metod-1 : CPP // C++ Implementering av Quick Sort Algorithm. #include using namespace std; int partition(int) arr[], int start, int end) { int pivot = arr[start]; int count = 0 for (int i = start + 1; i<= end; i++) { if (arr[i] <= pivot) count++; } // Giving pivot element its correct position int pivotIndex = start + count; swap(arr[pivotIndex], arr[start]); // Sorting left and right parts of the pivot element int i = start, j = end; while (i pivotIndex) { while (arr[i] <= pivot) { i++; } while (arr[j]>pivot) { j--; } if (i pivotIndex) { swap(arr[i++], arr[j--]); } } returnera pivotIndex; } void quickSort(int arr[], int start, int end) { // base case if (start>= end) return; // partitionering av arrayen int p = partition(arr, start, end); // Sortera den vänstra delen quickSort(arr, start, p - 1); // Sortera den högra delen quickSort(arr, p + 1, end); } int main() { int arr[] = { 9, 3, 4, 2, 1, 8 }; int n = 6; quickSort(arr, 0, n - 1); för (int i = 0; i cout<< arr[i] << ' '; } return 0; } Output 1 2 3 4 8 9 Method-2 : This method’s space complexity is O(n). As we will take an extra array in partition function like in merge function of merge sort . Algorithm explanation and steps of partition function: Make a new array of size equal to given array. push all the smaller elements than pivotElement to the new array. Push pivotElement to new array now. finally, push all the greater elements than pivotElement to the new array. Now, copy the new array to the original array. Store the index of the pivotElement from the original array. Return this index. After this, all the elements in the original array are in the order : smaller than pivotElement ->pivotElement -> större än pivotElement . Tidskomplexitet: θ(nlogn). Rymdkomplexitet: O(n). C++ // lagt till av Manish Sharma #include med namnutrymme std; int partition(int* arr, int start, int end) { // antar sista elementet som pivotElement int index = 0, pivotElement = arr[end], pivotIndex; int* temp = ny int[slut - start + 1]; // gör en array vars storlek är lika med nuvarande partitionsintervall... för (int i = start; i<= end; i++) // pushing all the elements in temp which are smaller than pivotElement { if(arr[i] { temp[index] = arr[i]; index++; } } temp[index] = pivotElement; // pushing pivotElement in temp index++; for (int i = start; i // pushing all the elements in temp which are greater than pivotElement { if(arr[i]>pivotElement) { temp[index] = arr[i]; index++; } } // alla element nu i temp array är ordning: // element längst till vänster är mindre än pivotElement och element längst till höger är större än pivotElement index = 0; för (int i = start; i<= end; i++) // copying all the elements to original array i.e arr { if(arr[i] == pivotElement) { // for getting pivot index in the original array. // we need the pivotIndex value in the original and not in the temp array pivotIndex = i; } arr[i] = temp[index]; index++; } return pivotIndex; // returning pivotIndex } void quickSort(int* arr, int start, int end) { if(start { int partitionIndex = partition(arr, start, end); // for getting partition quickSort(arr, start, partitionIndex - 1); // sorting left side array quickSort(arr, partitionIndex + 1, end); // sorting right side array } return; } int main() { int size = 9; int arr[size] = {5, 12, 7, 1, 13, 2 ,23, 11, 18}; cout << 'Unsorted array : '; for (int i = 0; i { cout << arr[i] << ' '; } printf('
'); quickSort(arr, 0, size - 1); cout << 'Sorted array : '; for (int i = 0; i { cout << arr[i] << ' '; } return 0; } Output Unsorted array : 5 12 7 1 13 2 23 11 18 Sorted array : 1 2 5 7 11 12 13 18 23 Please refer complete article on QuickSort for more details!>