这里是题目
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
切,我就要用sort咋滴???
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include<bits/stdc++.h> //万能 using namespace std; int arr[10000000]={0}; int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>arr[i]; } sort(arr,arr+n); for(int i=0;i<n;i++) { cout<<arr[i]<<" "; } cout<<endl; return owo; }
|
额,C++选手注意了,比赛中你可以用sort,但是你还是没有掌握快排的精华
当然,比赛中我是推荐大家用sort的,万一你quick_sort记不住呢
好吧,不皮了,下面是正常点的代码
等等,再发代码之前……
你得知道什么是qsort啊!
这…其实就是让你自己去写sort函数啦,不过要注意是void型哦~
———————————————华丽的分割线————————————————-
下面是AC代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include<bits/stdc++.h>//万能头好了(不过注意有些比赛是不能用万能头的) using namespace std; int n,a[1000005]= { }; void qsort(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) qsort(l,j); if(i<r) qsort(i,r); } int main() { cin>>n; for(int i=1; i<=n; i++) cin>>a[i]; qsort(1,n); for(int i=1; i<=n; i++) cout<<a[i]<<" "; return 0; }
|
注释都写了,请看懂程序再复制哦~
P.S:其实我的qsort过不了,请自行加优化~
有错误请指出,本蒟蒻会看的哦