sort快排函数的基本版,效率n*logn,快排的完全版就是在递归之中夹杂对序列的预判断,最优的选择排序方法,快速排序算法只是其中之一。
简单的说明一下快速排序的思想,对于一个数列,首先选择一个基数(x),进行第一次排序,把比x 小的放在x左边,大的放右边(默认从小到大)。
例如 : 8 4 5 7 6 9 2 1 3 0, 选择基数8 那么第一次排序的结果是这样的: 0 4 5 7 6 3 2 1 8 9
之后捏,分治一下,以基数为界,左边排一遍,右边排一遍,再用得到的基数为界再排,排到没数为止。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int integer[100000]; int qsort(int s,int e) { int i=s,j=e; int x=integer[i]; // 基准数 int s_or_b=1; // 找小数还是找大数的标志 while(i!=j) { if(s_or_b&1) // s_or_b 为奇数 往X左边放小或等于的数 { if(x >= integer[j]) { integer[i++]=integer[j]; s_or_b++; } else j--; } else { if(x <= integer[i]) { integer[j--]=integer[i]; s_or_b++; } else i++; } } integer[i]=x; return i; } void qsort_f(int s,int e) { if(e-s<=1) return; int pos=qsort(s,e); qsort_f(s,pos-1); qsort_f(pos+1,e); } int main() { int n; cin>>n; while(n--) { int t; cin>>t; for(int i=0;i<t;i++) { cin>>integer[i]; } qsort_f(0,t-1); for(int j=0;j<t;j++) { cout<<integer[j]<<" "; } cout<<endl; } return 0; } /* 10 8 4 5 7 6 9 2 1 3 0 */