#include <iostream> using namespace std; void qsort(int[], int , int); int main(void) { int array[] = {33,32,34,32,35,32,36}; int len = sizeof(array)/sizeof(int); for (int i = 0 ; i < len ; i ++) cout<<array[i]<<","; cout<<endl; qsort(array,0,len-1); for (int i = 0 ; i < len ; i ++) cout<<array[i]<<","; cout<<endl; return 0; } void qsort(int a[], int left, int right) { int pivot,l,r,temp; l = left; r = right; pivot = a[(left+right)/2]; while (l<r) { while(a[l] < pivot) ++l; while(a[r] > pivot) --r; if (l>=r) break; temp = a[l]; a[l] = a[r]; a[r] = temp; //@2_begin if (a[l] == pivot) --r;//因为还保留着pivot if (a[r] == pivot) ++l; //@2_end //@1_begin //if (l != pivot) // --r;//因为还保留着pivot //if (r != pivot) // ++l; //@1_end } if (l == r) l++; if (left <r)qsort(a,left,l-1); if (l<right)qsort(a,r+1,right); } 钱能著的《C++程序设计教程》中,使用的是@1的代码,但是此处代码的语义不正确,因此改成了@2标注的代码。 我来找茬,呵呵。