入门之快速排序

 1 #include <iostream>
 2 /*
 3 入门之快速排序
 4 时间复杂度:O(nlogn)
 5 最坏情况时时间复杂度能达到O(n^2)
 6 借鉴自算法导论
 7 */
 8 #include <algorithm>
 9 using namespace std;
10 int a[5] = {2,4,1,5,3};
11 void quick_sort3(int *a,int l,int r)//枢轴可以是任意一个位置的数
12 {
13     if(l >= r) return;
14     int k = a[r],i = l,j = r;
15     while(i < j){
16         while(i < j && a[i] <= k) ++i;
17         while(i < j && a[j] >= k) --j;
18         if(i != j) swap(a[i],a[j]);
19     }
20     swap(a[i],a[r]);
21     quick_sort3(a,l,i-1);
22     quick_sort3(a,i+1,j);
23 }
24 void quick_sort2(int *a,int l,int r)//枢轴只能是最后一个
25 {
26     if(l >= r) return;
27     int t = a[r],j = l-1;
28     for(int i = l; i <= r; ++i)
29         if(a[i] < t)
30         {
31             ++j;
32             if(i != j)
33                 swap(a[i],a[j]);
34         }
35     swap(a[j+1],a[r]);
36     quick_sort2(a,l,j);
37     quick_sort2(a,j+2,r);
38 }
39 void quick_sort(int *a,int l,int r)//枢轴只能是第一个
40 {
41     if(l >= r) return;
42     int m = a[l],i = l, j = r;
43     while(i < j){
44         while(i < j && a[j] >= m) --j; a[i] = a[j];
45         while(i < j && a[i] <= m) ++i; a[j] = a[i];
46     }
47     a[i] = m;
48     quick_sort(a,l,i-1);
49     quick_sort(a,i+1,r);
50 }
51 int main()
52 {
53     quick_sort2(a,0,4);
54     for(int i = 0; i < 5; ++i)
55         cout << a[i] << " ";
56     cout << endl;
57     return 0;
58 }
Quick_sort.cpp

 

posted @ 2017-07-23 09:52  Posase  阅读(191)  评论(0编辑  收藏  举报