1. #include<iostream>  
  2. using namespace std;  
  3. void exchange(int &i,int &j);  
  4. void quicksort(int i,int j,int A[],int &m);  
  5. int partition(int i,int j,int A[],int &m);  
  6. int main(){  
  7.     int A[]={0,1,4,9,11,3,6,7,18,21,5};  
  8.     int m;  
  9.     quicksort(0,10,A,m);  
  10.     for(int i=0;i<11;i++)cout<<A[i]<<" ";  
  11.     cout<<endl;  
  12.     cin>>m;  
  13.     return 0;  
  14.       
  15. }  
  16. //i为数组的下界,j为数组的上界  
  17. void quicksort(int i,int j,int A[],int &m){  
  18.     int p,q;  
  19.     int d=partition(i,j,A,m);  
  20.     //可能存在d=i的情况  
  21.     if(d-1>i)  
  22.     quicksort(i,d-1,A,p);  
  23.     if(d+1<j)  
  24.     quicksort(d+1,j,A,q);  
  25. }  
  26. //返回值为划分的位置  
  27. int partition(int i,int j,int A[],int &m){  
  28.     if(i==j) return i;  
  29.     int elem=A[i];  
  30.     int p=i+1;  
  31.     while(true){  
  32.     while(A[p]<=elem)p++;  
  33.     while(A[j]>elem)j--;  
  34.     if(p<j)exchange(A[p],A[j]);  
  35.     //把划分元素移到分界点  
  36.     //p>=j时,划分完毕  
  37.     else {exchange(A[j],A[i]);break;}  
  38.     //划分位置在j  
  39.     }  
  40.     return j;  
  41.       
  42.       
  43. }  
  44.  
  45. void exchange(int &i,int &j){  
  46. int temp=j;  
  47. j=i;  
  48. i=temp;  
中间出了点问题

不过还是弄出来了。。