快速排序
#include <bits/stdc++.h> using namespace std; void ksort(int *a,int l,int r){ int mid = a[(l+r)/2]; int i = l,j = r; do{ while(a[i]<mid){ i++; } while(a[j]>mid){ j--; } if(i<=j){ swap(a[i],a[j]); i++; j--; } }while(i<=j); if(l<j){ ksort(a,l,j); } if(i<r){ ksort(a,i,r); } } int main(){ int n; cin>>n; int a[n+5]; for(int i = 1;i<=n;i++){ cin>>a[i]; } ksort(a ,1,n); for(int i = 1;i<=n;i++){ cout<<a[i]<<endl; } return 0; }
#include <bits/stdc++.h> using namespace std; void ksort(int *a,int l,int r){ if(l<r){ int p = l; int i = l,j = r; int mid = a[p]; while(i!=j){ while(a[j]>=mid && i!=j){ j--; } while(a[i]<=mid && i!=j){ i++; } if(i<j){ swap(a[i],a[j]); } } swap(a[l],a[i]); ksort(a,l,i-1); ksort(a,i+1,r); } } int main(){ int n; cin>>n; int a[n+5]; for(int i = 0;i<n;i++){ cin>>a[i]; } ksort(a,0,n-1); for(int i = 0;i<n;i++){ cout<<a[i]<<endl; } return 0; }
基本思想
开始给定一个基准元素(随机),经过一次循环后,让比基本元素小的元素全部放在基准元素的左边,
让比基本元素大的元素全部放在基准元素的右边。
找好基准元素后,对基准元素的左边部分和右边部分分别重复上述过程(也就是递归)。