编辑代码

#include <stdio.h>

int findPivotPos(int *array, int arrStart, int arrEnd) {
	return arrStart;
//	return arrEnd-1;
}

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;
}