P1177 【模板】快速排序
2020-01-13 12:30
120 查看
题目描述
利用快速排序算法将读入的N个数从小到大排序后输出。
快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)
输入格式
第1行为一个正整数N,第2行包含N个空格隔开的正整数ai,为你需要进行排序的数,数据保证了A_i 不超过10000000001000000000。
输出格式
将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。
输入输出样例
输入
54 2 4 5 1
输出
1 2 4 4 5
说明/提示
对于20%的数据,有N≤1000N≤1000;
对于100%的数据,有N≤100000N≤100000
思路:开始没想太多,直接有套用了快排的模板,把最左边的那个数作为基数不断递归调用函数进行排序,发现五组数据中之过了前面两组,后面三组都是超时了。
后来就对代码进行了改进,在选取基数的时候用了随机的方法,但是在代码中没有关闭c中的输入输出流,导致最后还有一组数据没有过。
最后一次尝试就是加上了
std::ios::sync_with_stdio(false);成功ac该题。
#include<bits/stdc++.h> using namespace std; void quickSort(int a[], int left, int right) { if (left >= right) return; int i = left, j = right, pivot = rand() % (right - left + 1) + left; swap(a[left], a[pivot]); while (i < j) { while (j > i && a[j] >= a[left]) j--; while (i < j && a[i] <= a[left]) i++; swap(a[i], (i == j) ? a[left] : a[j]); } quickSort(a, left, i-1); quickSort(a, j+1, right); } int main() { int n; std::ios::sync_with_stdio(false); cin>>n; int a[n+10]; for(int i=1; i<=n; i++) { cin>>a[i]; } quickSort(a,1,n); for(int i=1; i<n; i++) { cout<<a[i]<<" "; } cout<<a[n]<<endl; return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 【快速排序】【模板】洛谷P1177
- 洛谷 P1177 【模板】快速排序
- P1177 【模板】快速排序
- 洛谷 P1177 【模板】快速排序
- 洛谷 P1177 【模板】快速排序【13种排序模版】
- 【排序】快速排序模板
- C语言快速排序模板大全(qsort函数)
- 用模板写快速排序-数组
- 模板 C/C++ 快速排序
- 【排序】快速排序模板
- 快速排序模板
- 快速排序模板
- (让我把右小指敲进键盘的)手写随机版快速排序模板
- poj2388 快速排序 模板题
- 模板:快速排序 && 第K大数O(n)解法
- [模板]快速排序
- 利用c++模板实现快速排序
- 快速排序,c++ 模板技术表述,完全兼容标准库!!!
- 快速排序模板和二分查找
- 快速排序【模板】