分治思想进行排序,目前在实践中使用最频繁效率最好的排序算法。

快速排序是一个不稳定的算法,主要是因为在进行最后一步划界元素与S[i+1]交换的时候有可能打破前面元素的稳定性。

图书馆老师在整理图书顺序的时候,会将一本书放中间,比这本书序列号大的放右边,小的放左边,这就是使用的快排哦~

C++代码如下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 template<class T> void quickSort(T data[],int p,int r)
 5 {
 6     int position = 0;
 7     if(p<r)
 8     {
 9         position = partition(data,p,r);
10         quickSort(data,p,position-1);
11         quickSort(data,p+1,r);
12     }
13 } 
14 
15 template<class T> int partition(T data[],int p,int r)
16 {
17     int position;
18     T temp = data[r];
19     int i = p-1;
20     for(int j=p;j<r;j++)
21     {
22         if(data[j]<=temp)
23         {
24             i+=1;
25             exchange(&data[i],&data[j]);
26         }
27     }
28     exchange(&data[i+1],&data[r]);
29     return i+1;
30 }
31 //从大到小
32 /*
33 template<class T> int partition(T data[],int p,int r)
34 {
35     int position;
36     T temp = data[p];
37     int i = r+1;
38     for(int j=r;j>p;j--)
39     {
40         if(data[j]<=temp)
41         {
42             i-=1;
43             exchange(&data[i],&data[j]);
44         }
45     }
46     exchange(&data[i-1],&data[p]);
47     return i-1;
48 }
49 */
50 template<class T>  void exchange(T *a,T *b)
51 {
52     T temp = *a;
53     *a = *b;
54     *b = temp;
55 }
56 
57 int main()
58 {
59     int data[] = {23,56,44,32,78,2,10};
60     int length = 7;
61     for(int i=0;i<length;i++)
62     {
63         cout<<data[i]<<" ";
64     }
65     cout<<endl;
66     quickSort(data,0,6);
67     for(int j=0;j<length;j++)
68     {
69         cout<<data[j]<<" ";
70     }
71     cout<<endl;
72     return 0;
73 }
View Code

 

posted on 2015-05-19 23:38  岳阳楼  阅读(197)  评论(0编辑  收藏  举报