51Nod-1018-排序
来源:互联网 发布:golang time.after 编辑:程序博客网 时间:2024/06/13 15:28
给出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):
#include <stdio.h>#define _MAX 50001void 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!!!
0 0
- 51Nod-1018-排序
- 51Nod--1018排序
- 51nod 1018 排序
- 51nod-【1018 排序】
- 【51Nod】1018 排序
- 51Nod 1018 排序
- 51Nod--1018 排序
- 51Nod-1018-排序
- 51nod 1018 排序
- 51NOD-1018 排序
- 51Nod-1018 排序【排序】
- 51Nod 1018 排序 STL
- 51nod 1485字母排序
- 51Nod-1020-逆序排序
- 51Nod - 1097 思维 + 排序
- 51Nod-1485-字母排序
- 特殊的排序 51Nod
- 51Nod-1874-字符串排序
- NVI
- 自定义控件之ProgressBar
- UVA 1395Slim Span(生成树)
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合
- 数学题
- 51Nod-1018-排序
- 关于fork函数的使用问题
- select, poll, epoll
- Linux 内核学习——系统调用(fork)
- Dropzone 图片拖动 组件DEMO
- Pku oj 3461 Oulipo(kmp)
- Android 安全卫士 第一天
- LeetCode 第 3 题(Longest Substring Without Repeating Characters)
- bestcoder #79 div2 A