http://www.acmerblog.com/quick-sort-5789.html
/* 快速排序朴素的实现 */
#include<stdio.h>
void swap(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
/*取最后一个作为基准 */
//划分操作的 第二种实现
int partition(int * arr, int start, int end) {
int i = start;//指向开头
int j = end + 1;//指向结尾
int pivot = arr[start];
while(true){
while( i<end && arr[++i] < pivot);//从前到后 第一个比 基准(x)大的数。 j指向该数
while(j>start && arr[--j] > pivot);//从后向前找到第一个比 基准(x)小的数。i指向该数
if(i >= j)
break;
swap(arr[i], arr[j]);
}
arr[start] = arr[j];
arr[j] = pivot;
return j;
}
/* arr[] --> 待排序数组, l --> 开始位置, h -->结束位置 */
void quickSort(int arr[], int l, int h)
{
if (l < h)
{
int p = partition(arr, l, h); /* p为划分的中间位置 */
quickSort(arr, l, p - 1);
quickSort(arr, p + 1, h);
}
}
/* 打印数组 */
void printArray(int arr[], int size)
{
int i;
for (i=0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
// 测试
int main()
{
int arr[] = {10, 7, 8, 9, 1, 5};
int n = sizeof(arr)/sizeof(arr[0]);
quickSort(arr, 0, n-1);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}