思路:
base: 取最低位为base
j: 从右向左找到比base小的数,放到第i位。i++
i: 从左向右找到比base大的数,放到第j位。j--
当i==j时,base放到第i位,此时base左面都是小于base的,base右边都是大于base的
递归:只要最低位小于最高位,执行递归
代码
#include <stdio.h>
//作用:打印数组元素
void display(int array[], int maxlen) {
for (int i = 0; i < maxlen; i++) {
printf("%-3d", array[i]);
}
printf("\n");
}
//作用:快速排序
void QuickSort(int *arr, int low, int high) {
//if语句如果low>=high,就不会再次递归
if (low < high) {
int i, j, base;
i = low;
j = high;
base = arr[low];
while (i < j) {
//从右往左找到大于base的数
while (i < j && arr[j] >= base) {
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
//从左往右找到小于base的数
while (i < j && arr[i] <= base) {//?
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[j] = base;
// 递归调用
QuickSort(arr, low, j - 1); // 排序k左边
QuickSort(arr, j + 1, high); // 排序k右边
}
}
// 主函数
int main() {
int array[] = {17, 34, 25, 17, 16};
int maxlen = sizeof(array) / sizeof(array[0]);
printf("before sort\n");
display(array, maxlen);
QuickSort(array, 0, maxlen - 1); // 快速排序
printf("after sort\n");
display(array, maxlen);
return 0;
}
标签:arr,int,C语言,high,while,base,low,排序,快速
From: https://www.cnblogs.com/Kaelthas/p/17348864.html