| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 550 人关注过本帖
标题:一个程序题,大家给点思路
只看楼主 加入收藏
紫ing~
Rank: 4
来 自:中科大
等 级:业余侠客
帖 子:103
专家分:273
注 册:2008-11-25
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:5 
一个程序题,大家给点思路
数组排序
输入一个数组的值,求出各个值从小到大排序后的次序。
输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割
输出:各输入的值按从小到大排列的次序。
sample
input:
4
-3 75 12 -3
output:
1 3 2 1
--------------
两个-3都是最小的,所以排序都为1.
大家说这个程序怎么编,说下思想,谢谢。(暂不考虑时间复杂度,得出答案就行)
搜索更多相关主题的帖子: 时间 
2011-03-11 15:12
wujieru
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:1
帖 子:1108
专家分:1939
注 册:2010-10-9
收藏
得分:0 
唉 没有前途啊
2011-03-11 15:22
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:5 
依次取一个数,与其他数比较,记录比其小的数的个数n,最后再考虑重复元素的问题
时间复杂度n*n+n

need test,result saved in index array
程序代码:
#define MAX_LEN 100
int index[MAX_LEN]={0};

void sort(int *list,int n)
{
    int i = 0,j = 0;
    int sameCount = 0;

    for (i=0; i<n; i++)
    {
        //find count of smaller value in list  
        for (j=0; j<n; j++)
        {
            if (i!=j && list[i] > list[j])
            {
                index[i]++;
            }
        }
        //no smaller value, this value duplicated
        if (0 == index[i])
        {
            sameCount++;
        }
    }
    for (i=0; i<n; i++)
    {
        //index start from 1
        index[i] == 0? index[i]++ : (index[i] -= (sameCount-2));
    }
}



[ 本帖最后由 njkido 于 2011-3-11 16:52 编辑 ]
2011-03-11 15:48
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:15 
笨人菜鸟,思路粗糙,经供参考!
程序代码:
#include <stdio.h>

int main (void) {

        int n;
        printf ("Enter length of array:");
        scanf ("%i",&n);
        printf ("Enter elements:\n");

        int a[n],b[n],i,j,k,m,temp;
        for(i=0;i<n;i++) {
                scanf ("%i",&a[i]);
        }
        for(i=0;i<n;i++) {
                b[i]=a[i];
         }
//ascending sort array
        for(i=0;i<n-1;i++) {
                for(j=i+1;j<n;j++) {
                        if(a[i]>a[j]) {
                                temp=a[i];
                                a[i]=a[j];
                                a[j]=temp;

                        }
                }
        }
        printf ("After sorted Array ...\n");
        for(i=0;i<n;i++) {
                printf ("%i ",a[i]);
        }
        printf ("\nAfter remove repetitive elements:\n");
//uniq elements
        i=0,j=0,k=0;
        while(i<n) {
                if(a[i]==a[i+1]) {
                        i++;
                        k++;
                        continue;
                }
                a[j]=a[i];
                j++;
                i++;
        }
//fixed position
        n=j;
        m=i;
        for(i=0;i<m;i++) {
                for(j=0;j<n;j++) {
                        if(b[i]==a[j]) { 
                            printf ("%i ",j+1); 
                        }
                }
        }

        printf ("\n");

        return 0;

}

测试:

root@~ #./1
Enter length of array:4
Enter elements:
-13 76 12 -3
After sorted Array ...
-13 -3 12 76
After remove repetitive elements:
1 4 3 2
root@~ #./1
Enter length of array:4
Enter elements:
-3 76 12 -3
After sorted Array ...
-3 -3 12 76
After remove repetitive elements:
1 3 2 1
root@~ #

[ 本帖最后由 ansic 于 2011-3-11 16:15 编辑 ]

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-11 16:11
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
这是个好题目,哈哈
2011-03-11 16:21
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:0 
果断表示,没怎么看懂。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-03-11 16:26
快速回复:一个程序题,大家给点思路
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017804 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved