参考资料:白话经典算法系列之六 快速排序 快速搞定
代码分析
#include<stdio.h>
#include<stdlib.h>
#define NUMBER 5
//targe[]:目标数组 retain:保留元素
void quick_sort(int target[], int left, int right){
int i = left, j = right;
int retain = target[left]; //将数组第一个元素提取出来。
if(i < j){
while(i < j){
//从右向左查找小于retain的元素并填入上一个坑。
while(i < j && target[j] >= retain){
j--;
}
if(i < j){
target[i++] = target[j];
}
//从左向右查找大于等于retain的元素并填入上一个坑。
while(i < j && target[i] < retain){
i++;
}
if(i < j){
target[j--] = target[i];
}
}
//退出循环时,i = j,将开始提取出的元素填入数组中。
target[i] = retain;
//递归调用。
quick_sort(target, left, i - 1); //左侧调整。
quick_sort(target, i + 1, right); //右侧调整。
}
}
int main(){
int vc[NUMBER];
printf("Please enter %d numbers:\n", NUMBER);
for(int i = 0; i < NUMBER; i++){
printf("Number%d:", i + 1);
scanf("%d", &vc[i]);
}
quick_sort(vc, 0, NUMBER - 1);
printf("\n");
for(int i = 0; i < NUMBER; i++){
printf("%d ", vc[i]);
}
printf("\n");
system("pause");
return 0;
}