Quick Sort

Quicksort is a divide-and-conquer algorithm. It works by selecting a 'pivot' element from the array and partitioning the other elements into two sub-arrays, according to whether they are less than or greater than the pivot

Time complexity:

1) The best case time complexity of quick sort is O(n*log n)
2)The average case time complexity of quick sort is O(n*log n)
3)The worst case time complexity of quick sort is O(n * log n)

Space complexity:

Space complexity of quick sort is O(n*log n)

Java

python

JavaScript

c

                 
                    
                        // Javascript implementation of QuickSort
                        
                        
                        // A utility function to swap two elements
                        function swap(arr, i, j) {
                            let temp = arr[i];
                            arr[i] = arr[j];
                            arr[j] = temp;
                        }
                        
                        /* This function takes last element as pivot, places
                        the pivot element at its correct position in sorted
                        array, and places all smaller (smaller than pivot)
                        to left of pivot and all greater elements to right
                        of pivot */
                        function partition(arr, low, high) {
                        
                            // pivot
                            let pivot = arr[high];
                        
                            // Index of smaller element and
                            // indicates the right position
                            // of pivot found so far
                            let i = (low - 1);
                        
                            for (let j = low; j <= high - 1; j++) {
                        
                                // If current element is smaller
                                // than the pivot
                                if (arr[j] < pivot) {
                        
                                    // Increment index of
                                    // smaller element
                                    i++;
                                    swap(arr, i, j);
                                }
                            }
                            swap(arr, i + 1, high);
                            return (i + 1);
                        }
                        
                        /* The main function that implements QuickSort
                                arr[] --> Array to be sorted,
                                low --> Starting index,
                                high --> Ending index
                        */
                        function quickSort(arr, low, high) {
                            if (low < high) {
                        
                                // pi is partitioning index, arr[p]
                                // is now at right place
                                let pi = partition(arr, low, high);
                        
                                // Separately sort elements before
                                // partition and after partition
                                quickSort(arr, low, pi - 1);
                                quickSort(arr, pi + 1, high);
                            }
                        }
                        
                        // Function to print an array
                        function printArray(arr, size) {
                            for (let i = 0; i < size; i++)
                                document.write(arr[i] + " ");
                        
                            document.write("
"); } // Driver Code let arr = [10, 7, 8, 9, 1, 5]; let n = arr.length; quickSort(arr, 0, n - 1); document.write("Sorted array:
"); printArray(arr, n);
// Java implementation of QuickSort import java.io.*; class GFG { // A utility function to swap two elements static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } /* This function takes last element as pivot, places the pivot element at its correct position in sorted array, and places all smaller (smaller than pivot) to left of pivot and all greater elements to right of pivot */ static int partition(int[] arr, int low, int high) { // pivot int pivot = arr[high]; // Index of smaller element and // indicates the right position // of pivot found so far int i = (low - 1); for (int j = low; j <= high - 1; j++) { // If current element is smaller // than the pivot if (arr[j] < pivot) { // Increment index of // smaller element i++; swap(arr, i, j); } } swap(arr, i + 1, high); return (i + 1); } /* The main function that implements QuickSort arr[] --> Array to be sorted, low --> Starting index, high --> Ending index */ static void quickSort(int[] arr, int low, int high) { if (low < high) { // pi is partitioning index, arr[p] // is now at right place int pi = partition(arr, low, high); // Separately sort elements before // partition and after partition quickSort(arr, low, pi - 1); quickSort(arr, pi + 1, high); } } // Function to print an array static void printArray(int[] arr, int size) { for (int i = 0; i < size; i++) System.out.print(arr[i] + " "); System.out.println(); } // Driver Code public static void main(String[] args) { int[] arr = { 10, 7, 8, 9, 1, 5 }; int n = arr.length; quickSort(arr, 0, n - 1); System.out.println("Sorted array: "); printArray(arr, n); } } # Python3 implementation of QuickSort # 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 # e 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 quick_sort(array, low, high): if low < high: # 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 quick_sort(array, low, pi - 1) # Recursive call on the right of pivot quick_sort(array, pi + 1, high) # Driver code array = [10, 7, 8, 9, 1, 5] quick_sort(array, 0, len(array) - 1) print(f'Sorted array: {array}') // Quick sort in C #include // function to swap elements void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } // function to find the partition position int partition(int array[], int low, int high) { // select the rightmost element as pivot int pivot = array[high]; // pointer for greater element int i = (low - 1); // traverse each element of the array // compare them with the pivot for (int j = low; j < high; j++) { if (array[j] <= pivot) { // if element smaller than pivot is found // swap it with the greater element pointed by i i++; // swap element at i with element at j swap(&array[i], &array[j]); } } // swap the pivot element with the greater element at i swap(&array[i + 1], &array[high]); // return the partition point return (i + 1); } void quickSort(int array[], int low, int high) { if (low < high) { // find the pivot element such that // elements smaller than pivot are on left of pivot // elements greater than pivot are on right of pivot int 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); } } // function to print array elements void printArray(int array[], int size) { for (int i = 0; i < size; ++i) { printf("%d ", array[i]); } printf("\n"); } // main function int main() { int data[] = {8, 7, 2, 1, 0, 9, 6}; int n = sizeof(data) / sizeof(data[0]); printf("Unsorted Array\n"); printArray(data, n); // perform quicksort on data quickSort(data, 0, n - 1); printf("Sorted array in ascending order: \n"); printArray(data, n); }