分治思想进行排序,目前在实践中使用最频繁效率最好的排序算法。
快速排序是一个不稳定的算法,主要是因为在进行最后一步划界元素与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 }