sdnu 1521(快速排序)
来源:互联网 发布:mysql教程视频下载 编辑:程序博客网 时间:2024/05/13 08:39
1521.排序
Time Limit: 1000 MS Memory Limit: 32768 KB
Total Submission(s): 73 Accepted Submission(s): 25
Description
将输入的数从小到大排序。
Input
输入数据n(1<=n<=1000000)
接下来输入n个数据
(多组输入数据)
Output
按格式输出排序后的n个数。
Sample Input
55 3 4 6 8
Sample Output
3 4 5 6 8
Source
Unknown
#include <iostream>#include <cstdio>#include <cstring>using namespace std;void quicksort(int a[], int left, int right);int a[1000000];int main(){ int n; while(scanf("%d", &n) != EOF) { memset(a,0,sizeof(a)); for(int i = 0; i < n; i ++) { scanf("%d", &a[i]); } quicksort(a,0,n-1); printf("%d", a[0]); for(int i = 1; i < n; i ++) { printf(" %d", a[i]); } printf("\n"); } return 0;}void quicksort(int a[], int left, int right){ if(left >= right) return; int i = left; int j = right; int key = a[left]; while(i < j) { while(j > i&&a[j] >= key) j --; a[i] = a[j]; while(i < j&&a[i] <= key) i ++; a[j] = a[i]; } a[i] = key; quicksort(a, left, i - 1); quicksort(a, i + 1, right);}
快速排序利用递归:
每一次递归是把最左边的元素当成基准,把本次所要排的的数分为,比基准大的数,和比基准小的数。
每一次递归,首先在最左边挖了个坑,从右往左找的比基准小的数,然后放入挖好的坑中,此时的坑是刚在挪走的那个数,然后从左向右找比基准大的数,放入坑中,以此类推。直到最后I,j相等,把基准数放入此时相等的值中。
阅读全文
0 0
- sdnu 1521(快速排序)
- sdnu 1521(堆排序应用)
- SDNU 1017 (冒泡排序法)
- sdnu 1031 字母排序(拓扑排序的利用)
- SDNU 1093.DNA排序 稳定排序(基数排序)
- SDNU 1089.拓扑排序 ...
- SDNU 1031.字母排序 拓扑排序
- SDNU 1056.A ^ B Problem【快速幂取余】【8月12】
- SDNU 1300.转圈游戏 快速幂 找循环节
- SDNU 1313.Chess 找规律 矩阵快速幂
- 排序总结(快速排序)
- 排序(之快速排序)
- 快速排序(java排序)
- wikioi1076 排序(快速排序)
- 排序(5)快速排序
- c++排序(快速排序)
- 排序(二)快速排序
- 排序(3)--快速排序
- Javascript入门一
- [Spring Boot实战系列]
- 最优化问题综述
- 第八章.对象的容纳 -----Thinking in java 更新中……
- 图解设计模式
- sdnu 1521(快速排序)
- 高阶导数的运算法则 与 莱布尼茨公式
- 拥塞控制分析之Compound
- 二、c++猜数字游戏
- 疯狂Activiti6.0连载(19)Activiti整合Spring
- 安装greenplum-loader
- LeetCode-Easy刷题(1) Two Sum
- Java基础知识总结(二)
- SSH_Hibernate分页问题