It uses the idea of divide and conquers. Divides the array into two halves using a pivot in such a way that elements in the left half are smaller than the pivot and elements in the right are greater than the pivot — then recursive using quick sort on the left and right parts.
I would recommend below youtube to understand Quick Sort:
https://www.youtube.com/watch?v=eqo2LxRADhU
Here is my implementation in javascript:
function quickSort(arr, start, end) {
// Stop the recursion when the start equal or smaller to the end
if (start >= end) {
return ;
};
// Here is the magic happen
let pivotIndex = partition(arr, start, end);
// Recursion - quick sort the left part
quickSort(arr, start, pivotIndex - 1);
// Recursion - quick sort the right part
quickSort(arr, pivotIndex + 1, end);
}
function partition (arr, start, end) {
let pivotIndex = start; // Pivot location
let pivotValue = arr[end]; // Use the last number
for (let i=start; i<end; i++) {
// Move number that smaller than pivot value to the front.
// Update pivot index
if (arr[i] < pivotValue) {
// Move to front
swap(arr, i, pivotIndex);
pivotIndex++;
}
}
// Swap the pivot value to correct location
swap(arr, end, pivotIndex);
return pivotIndex;
}
function swap(arr, a, b) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
let arr = [2 ,1, 4, 5, 3, 6, 6, 8, 1, 3];
quickSort(arr, 0, arr.length - 1);
No comments:
Post a Comment