思維導圖
排序效果
代碼分析
#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;
}