| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 645 人关注过本帖, 1 人收藏
标题:一个排序问题
只看楼主 加入收藏
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏(1)
 问题点数:0 回复次数:6 
一个排序问题
有一个比较大的数组,从中取最大值,次大值,个数可以指定,如数组2 3 4 5 5 6  12 4 33 12 19 21 比如取5个数,则为33 21 19 12 12 要求原数组不可以改变
2008-10-01 23:48
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
排个序,从后往前取啥~

樱花大战,  有爱.
2008-10-02 00:06
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
还有个思路(没验证过)
:
开个大的数组,然后进行映射统计...最后根据取得个数来二分....

感觉多半行不通.

樱花大战,  有爱.
2008-10-02 00:08
守鹤
Rank: 4
来 自:山東臨沂
等 级:贵宾
威 望:12
帖 子:337
专家分:0
注 册:2008-6-20
收藏
得分:0 
可以利用动态开辟空间存取数据

多少个日日夜夜想起你,只希望有缘再次相见
2008-10-02 00:11
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
还可以利用链表....-,-

樱花大战,  有爱.
2008-10-02 00:15
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
得分:0 
这是我的算法
int * GetTop(const int *array,int size,int length)
{
    int *p=new int[length];         //开辟动态数组用于存储,并将被返回

    int i,j,k;
    int index=0,top=0,count=0;

    for(i=j=0;i<size;i++)
    {
        if(array[i] < array[j])
            j=i;
    }
    *p=array[j];                    //原数组的最大值存储在p

    for(k=1;k<length;k++)            //循环开始
    {
        index=*(p+k-1);
        top=k-1;
        count=0;                    

        while(top>=0)
        {
            if(index==*(p+top))
            {
                count++;
                top--;
            }
            else break;
        }                            //获取跳过次数

        i=j=0;
        while(1)
        {
            if(array[i] < *(p+k-1))
            {
                i++;
                j++;
            }
            else
                if(array[i] == *(p+k-1) && count>0)
                {
                    i++;
                    j++;
                    count--;
                }
                else break;
        }

        for(;i<size;i++)
        {
            if(array[i] < *(p+k-1))
                continue;
            else
                if(array[i] == *(p+k-1) && count>0)
                {
                    count--;
                    continue;
                }

            if(array[i] < array[j])
            {
                j=i;
            }
        }

        *(p+k)=array[j];
    }

    return p;
}

给这个函数传递数组名,数组大小,需要得到的个数

你门都没说怎么算?怒
2008-10-02 00:43
xzghyd
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-3-29
收藏
得分:0 
哎呀,发错了,这是求最小的,代码,晕了,下面是正确的
int * GetTop(const int *array,int size,int length)
{
    int *p=new int[length];         //开辟动态数组用于存储,并将被返回

    int i,j,k;
    int index=0,top=0,count=0;

    for(i=j=0;i<size;i++)
    {
        if(array[i]>array[j])
            j=i;
    }
    *p=array[j];                    //原数组的最大值存储在p

    for(k=1;k<length;k++)            //循环开始
    {
        index=*(p+k-1);
        top=k-1;
        count=0;                    

        while(top>=0)
        {
            if(index==*(p+top))
            {
                count++;
                top--;
            }
            else break;
        }                            //获取跳过次数

        i=j=0;
        while(1)
        {
            if(array[i] > *(p+k-1))
            {
                i++;
                j++;
            }
            else
                if(array[i] == *(p+k-1) && count>0)
                {
                    i++;
                    j++;
                    count--;
                }
                else break;
        }

        for(;i<size;i++)
        {
            if(array[i] > *(p+k-1))
                continue;
            else
                if(array[i] == *(p+k-1) && count>0)
                {
                    count--;
                    continue;
                }

            if(array[i]>array[j])
            {
                j=i;
            }
        }

        *(p+k)=array[j];
    }

    return p;
}
2008-10-02 00:45
快速回复:一个排序问题
数据加载中...
 
   



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

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