算法实现:
#include <stdio.h>
void quick_sort(int a[], int low, int high){
int base = a[low];
int i=low, j=high, k=low;
// 终止条件:i和j碰面,即i=j
while(i < j){
// 当i不为坑的下标
while(i!=k){
// 且i对应元素小于或等于基准元素,右移
if(a[i] <= base){
i++;
// 当i对应元素大于基准元素,则与坑进行交换
}else{
a[k] = a[i];
k = i;
}
}
// 当j不为坑的下标
while(j!=k){
// 且j对应元素大于或等于基准元素,左移
if(a[j] > base){
j--;
// 当j对应元素小于基准元素,则与坑进行交换
}else{
a[k] = a[j];
k = j;
}
}
}
// 基准元素放到i和j的相遇位置,完成基准元素的位置定位
a[i] = base;
// 开始递归
// 如果i在low以后,说明i之前至少有一个元素,需要对之前的元素列进行快排
if(i>low){
quick_sort(a, low, i-1);
}
// 如果i在high以前,说明i之后至少有一个元素,需要对之后的元素列进行快排
if(i<high){
quick_sort(a, i+1, high);
}
}
void printAll(int a[], int n){
int i;
for(i=0; i<n; i++){
printf("%d ", a[i]);
}
}
int main(){
int a[9] = {23, 38, 22, 45, 23, 67, 31, 15, 41};
quick_sort(a, 0, 8);
printAll(a, 9);
printf("\n");
return 0;
}