1223 数组排序
来源:互联网 发布:淘宝代销货源怎么找 编辑:程序博客网 时间:2024/06/03 10:37
1223: 数组排序
时间限制: 1 Sec 内存限制: 32 MB
提交: 9 解决: 4
[提交][状态][讨论版]题目描述
输入一个数组的值,求出各个值从小到大排序后的次序。
输入
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
输出
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
样例输入
168 151 70 25 79 59 63 65 6 46 82 28 62 92 96 43
样例输出
11 11 3 12 7 9 10 2 6 13 4 8 14 15 5
提示
来源
数据结构高分笔记
//用数组来标记它的次序输出超限,不知道为什么得用二分法
//AC的
#include<iostream>#include<string.h>#include<algorithm> using namespace std;int a[10010], b[10010], c[10010];int Search(int arr[], int n, int x){int left = 0, right = n-1;int mid;while(left <= right){mid = (left+right)/2;if(x == arr[mid])return mid+1;else if(x > arr[mid])left = mid+1;else right = mid-1;}}int main(){int n, i;while(scanf("%d", &n) != EOF){memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));for(i = 0; i < n; i++){scanf("%d", &a[i]);b[i] = a[i];}sort(a, a+n);int k = 0;for(int i = 0; i < n-1; i++){ //数组去重 if(a[i] != a[i+1]) //因为前后有比较,最后一个单独列出 c[k++] = a[i];}c[k++] = a[n-1]; for(int i = 0; i < n; i++){if(i != n-1)printf("%d ", Search(c, k, b[i]));else printf("%d\n", Search(c, k, b[i]));}}return 0;
}
//原来写的 输出超限
#include<stdio.h>#include<string.h>#include<algorithm> using namespace std;int main(){ int n; int a[10010], b[10010], flag[10010]; while(1){ memset(a, 0, sizeof(a)); memset(flag, 0, sizeof(flag)); scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &a[i]); b[i] = a[i]; } sort(a, a+n+1); int k = 1; for(int i = 1; i < n ; i++){ if(a[i] != a[i+1]) flag[a[i]] = k++; } flag[a[n]]=k++; for(int i = 1; i < n; i++){ printf("%d ", flag[b[i]]); } printf("%d\n", flag[b[n]]); } return 0;}
时间限制: 1 Sec 内存限制: 32 MB
1223: 数组排序
提交: 9 解决: 4
[提交][状态][讨论版]题目描述
输入一个数组的值,求出各个值从小到大排序后的次序。
输入
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。输出
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
样例输入
168 151 70 25 79 59 63 65 6 46 82 28 62 92 96 43
样例输出
11 11 3 12 7 9 10 2 6 13 4 8 14 15 5
提示
来源
数据结构高分笔记
//用数组来标记它的次序输出超限,不知道为什么得用二分法//AC的#include<iostream>#include<string.h>#include<algorithm> using namespace std;int a[10010], b[10010], c[10010];int Search(int arr[], int n, int x){int left = 0, right = n-1;int mid;while(left <= right){mid = (left+right)/2;if(x == arr[mid])return mid+1;else if(x > arr[mid])left = mid+1;else right = mid-1;}}int main(){int n, i;while(scanf("%d", &n) != EOF){memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));memset(c, 0, sizeof(c));for(i = 0; i < n; i++){scanf("%d", &a[i]);b[i] = a[i];}sort(a, a+n);int k = 0;for(int i = 0; i < n-1; i++){ //数组去重 if(a[i] != a[i+1]) //因为前后有比较,最后一个单独列出 c[k++] = a[i];}c[k++] = a[n-1]; for(int i = 0; i < n; i++){if(i != n-1)printf("%d ", Search(c, k, b[i]));else printf("%d\n", Search(c, k, b[i]));}}return 0;}//原来写的 输出超限#include<stdio.h>#include<string.h>#include<algorithm> using namespace std;int main(){ int n; int a[10010], b[10010], flag[10010]; while(1){ memset(a, 0, sizeof(a)); memset(flag, 0, sizeof(flag)); scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &a[i]); b[i] = a[i]; } sort(a, a+n+1); int k = 1; for(int i = 1; i < n ; i++){ if(a[i] != a[i+1]) flag[a[i]] = k++; } flag[a[n]]=k++; for(int i = 1; i < n; i++){ printf("%d ", flag[b[i]]); } printf("%d\n", flag[b[n]]); } return 0;}
阅读全文
0 0
- 1223 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- PHP函数
- Struts2学习总结(七):Struts中的OGNL
- 微信小程序 rich-text a标签
- chrome打包扩展程序
- 学习javaScript历程——数据类型之对象
- 1223 数组排序
- 当前上下文中不存在名称ConfigurationManager的解决方法
- Disney牵手联想发布AR头显,还有配备激光剑的AR游戏《星球大战》
- Android 你可能忽略的提高敲代码效率的方式
- cookie和session机制之间的区别和联系
- Http状态码
- 开启memcached日志
- 华容道
- 05.22 LNMP组合架构