排序方法汇总(二)快速排序

快速排序使用了分治思想,分解为求 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<<"\n";
42     quicksort(a,0,5);
43     for(int i=0;i<6;i++)cout<<a[i]<<"  ";
44     cout<<"\n";
45     return 0;
46 }

 

posted @ 2016-08-31 21:12  backinfile  阅读(164)  评论(0编辑  收藏  举报