51Nod-1018-排序
2016-04-16 12:05
465 查看
给出N个整数,对着N个整数进行排序
Input
第1行:整数的数量N(1 <= N <= 50000)
第2 - N + 1行:待排序的整数(-10^9 <= A[i] <= 10^9)
Output
共n行,按照递增序输出排序好的数据。
Input示例
5
5
4
3
2
1
Output示例
1
2
3
4
5
根据本题的数据范围,我们可以知道需要用到快排方可。
代码如下(C):
这里着重要强调,调换位置的方法抽离为swap函数时,如果使用的是按位异或(^),则要着重考虑一下low和high想等的情况,相等时直接返回空。
也就这样了,别的没啥强调的了。OVER!!!
Input
第1行:整数的数量N(1 <= N <= 50000)
第2 - N + 1行:待排序的整数(-10^9 <= A[i] <= 10^9)
Output
共n行,按照递增序输出排序好的数据。
Input示例
5
5
4
3
2
1
Output示例
1
2
3
4
5
根据本题的数据范围,我们可以知道需要用到快排方可。
代码如下(C):
#include <stdio.h> #define _MAX 50001 void swap(long *A, int low, int high) { if (low == high) { return ; } A[low] ^= A[high]; A[high] ^= A[low]; A[low] ^= A[high]; return ; } int Partition(long *A, int low, int high) { long pivotkey = A[low]; while (low < high) { while (low < high && A[high] >= pivotkey) { high--; } swap(A, low, high); while (low < high && A[low] <= pivotkey) { low++; } swap(A, low, high); } return low; } void QSort(long *A, int low, int high) { int pivot; if (low < high) { pivot = Partition(A, low, high); QSort(A, low, pivot - 1); QSort(A, pivot + 1, high); } } void sort(long *A, int N) { QSort(A, 1, N); } int main(int argc, const char * argv[]) { int N, i = 1; long A[_MAX]; scanf("%d", &N); for (; i <= N; i++) { scanf("%ld", &A[i]); } sort(A, N); for (i = 1; i <= N; i++) { printf("%ld\n", A[i]); } return 0; }
这里着重要强调,调换位置的方法抽离为swap函数时,如果使用的是按位异或(^),则要着重考虑一下low和high想等的情况,相等时直接返回空。
也就这样了,别的没啥强调的了。OVER!!!
相关文章推荐
- 数学题
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- * 和 ?在 shell 命令行中与在正则表达式中的区别
- ERC系统理论的提出与研发成功,是企业信息化管理史上划时代的革命
- BruteForceMatcher无法找到
- activiti自定义流程之整合(五):启动流程时获取自定义表单
- 书籍列表
- 数据库Sharding的基本思想和切分策略
- Java学习-10天
- Java 线程池原理解析(一)
- 【学习anroid编译】关于运行android模拟器
- NVI
- hihoCoder 1015 KMP算法(kmp)
- Fragment页面的切换
- JAVA修改组件
- 【模拟】HDU4509湫湫系列故事——减肥记II
- Windows Docker的有趣事实 推荐
- Linux用户管理:addgroup、adduser、usermod
- android 调用远程service时报java.lang.SecurityException: Binder invocation to an incorrect interface异常
- position、opacity与z-index的组合