#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); }
原文:http://www.cnblogs.com/AndyHoo/p/6391556.html