// 快速排序
/*
mode: 非0:升序, 0:降序
*/
void sort_quickSort(int *arr, int len, int mode)
{
sort_quickSort_main(arr, 0, len-1, mode);
}
// 快速排序递归函数
void sort_quickSort_main(int *arr, int i, int j, int mode)
{
int tmp;
int s = i;
int e = j;
if(i >= j) return;
while(i < j)
{
// arr[j] >= arr[i]
while(!sort_judgeWithMode(arr[j], arr[i], mode) && (i < j))
{
j--;
}
if(i < j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
while(!sort_judgeWithMode(arr[j], arr[i], mode) && (i < j))
{
i++;
}
if(i < j)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
sort_quickSort_main(arr, s, i-1, mode);
sort_quickSort_main(arr, i+1, e, mode);
}
运算结果
测试代码
#define N 8
int main()
{
int arr[N] = {49,38,65,97,76,13,27,49};
printf("升序排列结果:\n");
sort_quickSort(arr, N, 1);
utils_print_arr(arr, N, "%d ");
printf("\n\n降序排列结果:\n");
sort_quickSort(arr, N, 0);
utils_print_arr(arr, N, "%d ");
return 0;
}