算法--快速排序
快速排序模板
快速排序是十分常用的高效率的算法。 其思想是:先选一个“标尺”,
用它把整个队列过一遍筛子,
以保证:其左边的元素都不大于它,其右边的元素都不小于它。 这样,排序问题就被分割为两个子区间。
再分别对子区间排序就可以了。
伪代码 void quick_sort(操作的数组,值的范围l,r) { 判断边界,给出递归出口 确定一个数x,确定指针i,j while(i<j) { 若满足条件,指针向中间移动 交换两指针所指向的数 } 中间数两端递归进行 } //快速排序模板 #include<iostream> using namespace std; const int N=1e6+10; int n; int q[N]; void quick_sort(int q[],int l,int r) { if(l>=r) return; int x=q[l],i=l-1,j=r+1; while(i<j) { do i++;while(q[i]<x); do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]); } quick_sort(q,l,j); quick_sort(q,j+1,r); } int main() { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&q[i]); quick_sort(q,0,n-1); for(int i=0;i<n;i++) printf("%d",q[i]); return 0; } 1、while循环里面两个do while+一个一个判断 2、尾递归 复杂度分析 平均时间复杂度:O(NlogN) 最佳时间复杂度:O(NlogN) 最差时间复杂度:O(N^2)