首页 新闻 会员 周边

递归方法求第k大元素,各位路过的同志们,哥哥姐们,给俺瞧瞧呗!

0
悬赏园豆:10 [待解决问题]

存在一个一维数组

int a[10]={125,26,35,24,548,256,25,298,7852,11};

想用递归的方法求第k大元素,比如说k=4

如何求啊!

想的头大了也不知道啊

c
半分微醉的主页 半分微醉 | 初学一级 | 园豆:60
提问于:2012-06-23 15:57
< >
分享
所有回答(4)
0

先用排序,后直接找K=4的数字。

悟行 | 园豆:12559 (专家六级) | 2012-06-23 21:59
0

这个需求,使用排序,然后通过找序号来获得目标是最好的,也就是荒野的呼唤 所说的方案。

一定要递归的话。。。有点大材小用,也有点浪费资源,但还是可以解决的。毕竟使用排序后,要改变数组中元素的顺序,而且,后续插入数据也必须有序的插入(否则必须再次排序)。

实现方案(我用C#写了,很久不用C了,有点怪怪的,好在C#也差不多的语法):

int GetValue(int[] array, int start, int count, int pos)
{
    int result;
    if(count == pos)
    {
        result = array[start];
        for(int i = start + 1; i < start + count; i++)
        {
            if(result < array[i])
            {
                result = array[i];
            }
        } 
    }
    else
    {
        result = GetValue(array, start + 1, count - 1, pos);
        result = array[start] > result ? array[start] : result;
    }
    return result;
}

思路就是这样,但在具体实现的时候,这个求值结果是有bug的。(希望你能找出其中的bug并加以修正。找出来应该不难,修正有点难度,一时半会也弄不出来,这里就抛砖引玉了)。

无之无 | 园豆:5095 (大侠五级) | 2012-06-24 09:02
0

直接进行判断 当K值等于4的时候 推出递归不久可以了~!

落幕残情 | 园豆:34 (初学一级) | 2012-06-25 11:37
0

看不懂上面的代码 建议使用冒泡排序。但是呢,冒泡会将整个数组排好,第一次个冒泡子过程得到最大数在列尾,第二次得到第二大的,第k次得到你要的了。只要排到第k次就OK。

Orange Cheng | 园豆:204 (菜鸟二级) | 2012-06-26 15:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册