入门之快速排序
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 }