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;}

原创粉丝点击