| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2789 人关注过本帖
标题:有多少人写程序必须经常用到递归的?
只看楼主 加入收藏
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
我也贴一个!寻找第k大的元素的代码如下(为简单起见,数组作顺序表,改链表也不难:))。使用的是随机算法!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int select(int a[], int n, int k)
{
    int r;
    int p;
    int a1[10], a2[10];
    int j = 0, l = 0, i = 0;

    srand((int)time(0));   
    r = rand()%n;
    p = a[r];
   
    //printf("%d, %d,%d\n", r,n,p);
    for(i = 0; i < n; ++i)
    {
        if(a[i] > p)
            a1[j++] = a[i];
        else
            if(a[i] < p )
             a2[l++] = a[i];
    }
   
    if( k <= j)
        return select(a1, j, k);
    else
       if (k > (n - l))
          return select(a2, l, k-(n-l));
       else
          return p;     
     
 }

int main()
{
    int k = 4;
    int a[10] = {11,3,343,2399, 9892, 133, 29, 5923,83,4939};
    int x = select(a, 10, k);
   
    printf("第%d大的元素为: %d\n", k, x);
 
    system("PAUSE");
    return 0;
}



2010-07-31 13:15
快速回复:有多少人写程序必须经常用到递归的?
数据加载中...
 
   



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

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