#include <stdio.h>
void printArray(int array[], int arrLen) {
for (int i = 0; i < arrLen; ++i) {
printf("%d ", array[i]);
}
printf("\n");
}
int partition(int array[], int arrStart, int arrEnd, int pivotPos) {
int pivotValue = array[pivotPos];
array[pivotPos] = array[arrEnd - 1];
int i = arrStart;
for (int j = arrStart; j < arrEnd - 1; ++j) {
if (array[j] < pivotValue) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
++i;
}
}
array[arrEnd - 1] = array[i];
array[i] = pivotValue;
return i;
}
int findPivotPos(int array[], int arrStart, int arrEnd) {
int mid = arrStart + (arrEnd - arrStart) / 2;
return mid;
}
void quickSort(int array[], int arrStart, int arrEnd) {
if (arrEnd - arrStart <= 1) {
return;
}
int pivotPos = findPivotPos(array, arrStart, arrEnd);
int pivotOrderedPos = partition(array, arrStart, arrEnd, pivotPos);
quickSort(array, arrStart, pivotOrderedPos);
quickSort(array, pivotOrderedPos + 1, arrEnd);
}
int main() {
int array0[] = {};
int arrayLen = sizeof(array0) / sizeof(int);
printArray(array0, arrayLen);
quickSort(array0, 0, arrayLen);
printArray(array0, arrayLen);
printf("=========================================\n");
int array1[] = {1};
arrayLen = sizeof(array1) / sizeof(int);
printArray(array1, arrayLen);
quickSort(array1, 0, arrayLen);
printArray(array1, arrayLen);
printf("=========================================\n");
int array2[] = {1,5,2,7,9};
arrayLen = sizeof(array2) / sizeof(int);
printArray(array2, arrayLen);
quickSort(array2, 0, arrayLen);
printArray(array2, arrayLen);
return 0;
}