#include <stdio.h>
int findPivotPos(int *array, int arrStart, int arrEnd) {
return arrStart;
}
int partition(int *array, int arrStart, int arrEnd, int pivotPos) {
int pivotValue = array[pivotPos];
array[pivotPos] = array[arrEnd-1];
int ltPivotValueCount=0, i=arrStart;
for (; i<arrEnd-1; ++i) {
if (array[i] < pivotValue) {
int temp = array[arrStart+ltPivotValueCount];
array[arrStart+ltPivotValueCount] = array[i];
array[i] = temp;
++ltPivotValueCount;
}
}
array[arrEnd-1] = array[arrStart+ltPivotValueCount];
array[arrStart+ltPivotValueCount] = pivotValue;
return arrStart+ltPivotValueCount;
}
void quickSort(int *array, int arrStart, int arrEnd) {
if (arrEnd-arrStart < 2) 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 array[] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 9, 5};
int arrEnd = sizeof(array)/sizeof(int);
quickSort(array, 0, arrEnd);
int i;
for (i=0; i<arrEnd; ++i) printf("%d ", array[i]);
return 0;
}