// main.c
#include <stdio.h>
int array[10] = {8, 4, 9, 7, 3, 6, 2, 0 ,1, 5};
void quicksort(int left, int right) {
if (left >= right) {
return;
}
int i = 0, j = 0, temp = 0, reference = 0;
reference = array[left]; // reference中存储的就是基准数
i = left;
j = right;
while (i != j) {
// 顺序很重要
// 1. 要先从右边开始找,找比基准数小的
while (array[j] >= reference && i < j) {
// 如果大于等于基准数,则继续向左找,所以j--
j--;
}
// 2. 再从左边开始找,找比基准数大的
while (array[i] <= reference && i < j) {
// 如果小于等于基准数,则继续向右找,所以i++
i++;
}
// 交换两个数在数组中的位置
if (i < j) {
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
// 最终,将基准数归位
array[left] = array[i];
array[i] = reference;
// 递归调用
quicksort(left, i - 1); // 继续处理左边的, 这里是一个递归的过程
quicksort(i + 1, right); // 同理,继续处理右边的
}
int main(int argc, const char * argv[]) {
// insert code here...
// 快速排序
quicksort(0, 9);
printf("快速排序结果如下:\n");
for (int i = 0; i < 10; i++) {
printf("%d\n", array[i]);
}
return 0;
}
控制台日志如下:
快速排序结果如下:
0
1
2
3
4
5
6
7
8
9
Program ended with exit code: 0