基础算法之快速排序

时间:2022-08-26 11:24:53

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

快速排序是一个不稳定的算法,主要是因为在进行最后一步划界元素与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