1177 快速排序
题目描述
利用快速排序算法将读入的N个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
代码:
#include<iostream> using namespace std; //快速排序模板 int a[100010]; void qsort(int left, int right){ if(left < right){ int i = left, j = right; int key = a[left]; while(i < j){ while(i<j && a[j]>=key) j--; while(i<j && a[i]<=key) i++; if(i<j){ int t = a[i]; a[i] = a[j]; a[j] = t; } } a[left] = a[i]; a[i] = key; qsort(left, i-1); qsort(i+1, right); } } int main(){ int i, n; cin>>n; for(i = 0; i < n; i++) cin>>a[i]; qsort(0, n-1); for(i = 0; i < n; i++) cout<<a[i]<<" "; return 0; }
备注:
这道题冠冕堂皇地说考验我们写快速排序,写完标准的快排根本过不了,最后还是用sort过的。。。贴在这里的是我认真地写了一遍的快排。我发现快排有两种写法,这里是我习惯的一种,因为之前看过这种写法的图解。。注意什么时候要取等。