Quick Sort
QuickSort is a sorting algorithm based on the Divide and Conquer algorithm that picks an element as a pivot
and partitions the given array around the picked pivot by placing the pivot in its correct position in the sorted array.
The key process in quickSort is a partition(). The target of partitions is to place the pivot (any element can be chosen
to be a pivot) at its correct position in the sorted array and put all smaller elements to the left of the pivot, and all
greater elements to the right of the pivot. Partition is done recursively on each side of the pivot after the pivot is
placed in its correct position and this finally sorts the array.
C
Java
Python
int partition(int arr[], int low, int high) {
int pivot = arr[low];
int i = low + 1;
int j = high;
int temp;
while (i <= j) {
if (arr[i] <= pivot) {
i++;
} else if (arr[j] > pivot) {
j--;
} else {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
temp = arr[low];
arr[low] = arr[j];
arr[j] = temp;
return j;
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {5, 3, 8, 4, 2, 7, 1, 6};
int n = sizeof(arr) / sizeof(arr[0]);
printf("Original Array:\n");
printArray(arr, n);
quickSort(arr, 0, n - 1);
printf("Sorted Array:\n");
printArray(arr, n);
return 0;
}
public class QuickSort {
public static void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pivotIndex = partition(arr, low, high);
quickSort(arr, low, pivotIndex - 1);
quickSort(arr, pivotIndex + 1, high);
}
}
public static int partition(int[] arr, int low, int high) {
int pivot = arr[low];
int i = low + 1;
int j = high;
while (i <= j) {
if (arr[i] <= pivot) {
i++;
} else if (arr[j] > pivot) {
j--;
} else {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
int temp = arr[low];
arr[low] = arr[j];
arr[j] = temp;
return j; // return the pivot index
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 4, 2, 7, 1, 6};
int n = arr.length;
System.out.println("Original Array:");
printArray(arr);
quickSort(arr, 0, n - 1);
System.out.println("Sorted Array:");
printArray(arr);
}
public static void printArray(int[] arr) {
for (int num : arr) {
System.out.print(num + " ");
}
System.out.println();
}
}
function partition(arr, low, high):
pivot = arr[low]
i = low + 1
j = high
while i <= j:
if arr[i] <= pivot:
i++
else if arr[j] > pivot:
j--
else:
swap arr[i] and arr[j]
swap arr[low] and arr[j]
return j
function quickSort(arr, low, high):
if low < high:
pivotIndex = partition(arr, low, high)
quickSort(arr, low, pivotIndex - 1)
quickSort(arr, pivotIndex + 1, high)