时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2897
解决:903
- 题目描述:
-
输入一个数组的值,求出各个值从小到大排序后的次序。
- 输入:
-
输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。
- 输出:
-
各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。
- 样例输入:
-
4 -3 75 12 -3
- 样例输出:
-
1 3 2 1
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int array[10010]; int array1[10010]; int array2[10010]; int Search (int a[], int n,int x)//二分查找 { int left=0,right=n-1; while (left<=right) { int middle=(left+right)/2; if (a[middle]==x) return middle+1; else if (a[middle]<x) left=middle+1; else right=middle-1; } } int main() { int length,i; while(scanf ("%d",&length)!=EOF) { for (i=0;i<length;i++) { scanf ("%d",array+i); array1[i]=array[i]; } sort (array1,array1+length); int k=0; for (i=0;i<length-1;i++)//数组去重 { if (array1[i]!=array1[i+1]) array2[k++]=array1[i]; } array2[k++]=array1[length-1]; for (i=0;i<length;i++) { if (i!=length-1) printf("%d ",Search(array2,k,array[i])); else printf("%d\n",Search(array2,k,array[i])); } } return 0; }