
#include <stdio.h>
void printArr(int arr[],int len ) {
for(int i = 0 ; i<len; i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
int quicksort(int arr[], int left, int right) {
printf("左%d 右%d\n",left,right);
if(left < right) {
// 定位最左
int key = arr[left];
int i = left;
int j = right;
while(i < j) {
// 右边大的换左边来
while(i < j && arr[j] > key) {
// 高标左移←
j--;
}
if (arr[i] != arr[j]) {
// 高位:小的往左边拉
arr[i] = arr[j];
}
printf("i=%d <-- j=%d:\t",i,j);
printArr(arr, 5);
// 左边小的换右边去
while(i < j && arr[i] < key) {
// 低标右移→
i++;
}
if (arr[i] != arr[j]) {
// 地位:大的往右边拉
arr[j] = arr[i];
}
printf("i=%d --> j=%d:\t",i,j);
printArr(arr, 5);
}
arr[i] = key;
printf("arr[%d] <-- %d:\t",i,key);
printArr(arr, 5);
quicksort(arr,left,i-1);
quicksort(arr,i+1,right);
}
}
//--------------------------------------------
main() {
int a[] = {3,4,5,1,2};
printArr(a,5);
quicksort(a, 0, 4);
printArr(a,5);
}