快速排序使用了分治思想,分解为求 a(p..q-1)<a[q]<a(q+1) 的问题 + 分别递归a(p..q-1),a(q+1).
1 #include <iostream> 2 using std::cout; 3 4 // a[p..q-1]<a[q]<a[q+1..r]的形式 5 int partition(int *a,int p,int r) 6 { 7 //选a[r]为主元 8 int x=a[r]; 9 int i=p-1,temp; 10 for(int j=p;j<=r-1;j++) 11 { 12 //若a[j]小于主元,提到前面 13 if(a[j]<x) 14 { 15 i++; 16 if(i!=j) 17 {temp=a[i];a[i]=a[j];a[j]=temp;} 18 } 19 } 20 //将主元放到小的和大的中间,返回主元位置 21 if(r!=i+1) 22 {temp=a[r];a[r]=a[i+1];a[i+1]=temp;} 23 return i+1; 24 } 25 void quicksort(int *a,int p,int r) 26 { 27 if(p<r) 28 { 29 //处理成 a[p..q-1]<a[q]<a[q+1..r]的形式 30 int q=partition(a,p,r); 31 //递归处理a[p..q-1],a[q+1..r] 32 quicksort(a,p,q-1); 33 quicksort(a,q+1,r); 34 } 35 } 36 37 int main() 38 { 39 int a[]={1,45,3,24,0,45}; 40 for(int i=0;i<6;i++)cout<<a[i]<<" "; 41 cout<<" "; 42 quicksort(a,0,5); 43 for(int i=0;i<6;i++)cout<<a[i]<<" "; 44 cout<<" "; 45 return 0; 46 }