快排

清晰的了解了快排,CLICK HERE带你了解快排

快速排序的基本思想:挖坑填数+分治法

1、先从数列中取出一个数作为基准数

2、分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边

3、再对左右区间重复第二步,直到各区间只有一个数

 

 1 #include<iostream>
 2 using namespace std;
 3 
 4 void Q_sort(int *a,int start,int end){
 5     if(start>=end)return ;
 6     int i=start;
 7     int j=end;
 8     int key=a[i];
 9     while(i<j){
10         while(i<j&&a[j]>=key){
11             j--;
12         }
13         a[i]=a[j];
14         while(i<j&&a[i]<=key){
15             i++;
16         }
17         a[j]=a[i];
18     }
19     a[i]=key;
20     Q_sort(a,start,i-1);
21     Q_sort(a,i+1,end);
22 }
23 int main(){
24     int n,a[100];
25     cin>>n;
26     for(int i=0;i<n;i++)cin>>a[i];
27     Q_sort(a,0,n-1);/*这里的第三个参数要减1否则内存越界*/
28     for(int i=0;i<n;i++)cout<<a[i]<<" ";
29 }

 以下代码为快排的另一种方法,这里小明也给不出详解,有兴趣可以了解以下,

 1 #include <iostream>  
 2 using namespace std;  
 3   
 4 int partition(int *a,int p,int r){
 5     int i=p;
 6     for(int j=p;j<=r-1;j++){
 7         if(a[j]<=a[r]){
 8             swap(a[j],a[r]);
 9         }
10     }
11     swap(a[i],a[r]);
12     return i;
13 }
14 int Q_sort(int *a,int p,int r){
15     if(p<r){
16         int q=partition(a,p,r);
17         Q_sort(a,p,q-1);
18         Q_sort(a,q+1,r);
19     }    
20 }
21 
22 int main()  
23 {  
24     int i;  
25     int a[] = { 88, 1, 22, 99, 55, 77, 33, 66, 44, 70 };  
26     cout << "After the quick sort,the data is:" << endl;  
27     Q_sort(a, 0, 9);  
28     for(int i=0;i<10;i++)cout<<a[i]<<" ";  
29     cout << endl;  
30   
31     return 0;  
32 }  

 

posted @ 2018-02-03 15:00  明楼  阅读(151)  评论(0)    收藏  举报