iNVAiN

博客园 首页 新随笔 联系 订阅 管理
题目1167:数组排序

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:2107

解决:654

题目描述:

输入一个数组的值,求出各个值从小到大排序后的次序。

输入:

输入有多组数据。
每组输入的第一个数为数组的长度n(1<=n<=10000),后面的数为数组中的值,以空格分割。

输出:

各输入的值按从小到大排列的次序(最后一个数字后面没有空格)。

样例输入:
4
-3 75 12 -3
样例输出:
1 3 2 1
来源:
2009年北京航空航天大学计算机研究生机试真题
-------
这道题的题干有点难理解,不看样例输入和输出你完全不知道它想表达什么意思。
可以这样理解:将一个无序数组排序并删除重复数值以后,旧数组的每个值在新数组中的位序。
这样通过以下三步可以达成目的:
1、将无序数组排序,生成新数组。
2、将新数组重复值删除。
3、遍历旧数组,输出旧数组每个值在新数组中的位序。
C++代码如下:
 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 
 5 //定位函数,参数依次为:待查找数组,查找次数,查找值
 6 int locate(int array[], int n, int value)
 7 {
 8     for(int i=0; i<n; i++)
 9     {
10         if(value == array[i])
11             return i+1;
12     }
13 }
14 //消除有序数组中的重复数值,参数依次为:待删除数组,数组长度。
15 int unique(int result[], int length)
16 {
17     int i;
18     int count = 0;
19     //自己推出来的算法,还算简洁
20     for(i = 0; i<length; i++)
21     {
22         if(result[i] == result[i+1])
23             count++;
24         else
25             result[i+1-count] = result[i+1];
26     }
27     return count; //删掉的元素总数。
28 }
29 
30 int main()
31 {
32     int input[10000], result[10000];
33     int length, i;
34     while( scanf("%d", &length) != EOF)
35     {
36         for(i = 0; i<length; i++)
37         {
38             scanf("%d", &input[i]);
39             result[i] = input[i];
40         }
41         //今天刚学的STL排序函数,来自<algorithm>库,多快好省,比较赖皮。默认为升序排列。
42         sort(result, result+length);
43         //去除重复元素,count为删掉的元素数
44         int count = unique(result, length);
45 
46         int resultLength = length - count;
47         //遍历原数组,输出其每个元素在新数组中的位序
48         for(i = 0; i< length; i++)
49         {
50             printf("%d", locate(result, resultLength, input[i]));
51             if(i != length - 1)
52                 printf(" ");
53         }
54 
55     printf("\n");
56     }
57     return 0;
58 }

 已AC:

1 /**************************************************************
2     Problem: 1167
3     User: kkzxak47
4     Language: C++
5     Result: Accepted
6     Time:70 ms
7     Memory:1012 kb
8 ****************************************************************/

 

 
今天下午的成果,编程学习算是开了个头。
posted on 2013-02-25 21:33  iNVAiN  阅读(207)  评论(0)    收藏  举报