| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 237 人关注过本帖
标题:折半查找。。。求教大神
只看楼主 加入收藏
bian0531
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-10-25
结帖率:0
收藏
已结贴  问题点数:18 回复次数:3 
折半查找。。。求教大神
#include<stdio.h>
int main()
{
    int num[41],score[41],search,i,j,k,tem;
    for(i=1;;i++)
    {
         scanf("%d%d",&num[i],&score[i]);
         if((num[i]==-1)&&(score[i]==-1))
            break;

    }
    i--;
    for(j=1;j<i;j++)
    {
        for(k=j+1;k<=i;k++)
            if(num[j]>num[k])
            {
                    tem=num[k];
                num[k]=num[j];
                num[j]=tem;
                                tem=score[k];
                                score[k]=score[j];
                                score[j]=tem;
            }
    }
    scanf("%d",&search);
    for(j=0;j<=i;j++)
    if(search==num[i/2])
    {
         printf("%d",score[i/2]);
         break;
    }
    else if(search<num[i/2])
    {
        i=i/2;
    }
    else if(search>num[i/2])
    {
        i=i/2+i/4;
    }
        return 0;
}
搜索更多相关主题的帖子: include search 
2012-12-05 21:02
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
收藏
得分:6 
你这个不是折半查找吧,再说你的i都是整形的,这样的话i/2,i/4有可能不起作用

重要的不是结果,是求一个结果的过程,哪怕千难万难,当你有想要的结果时,你已走的很远
2012-12-05 21:10
重大C语言
Rank: 2
等 级:论坛游民
帖 子:76
专家分:70
注 册:2012-11-16
收藏
得分:6 
《计算机程序设计基础(C语言)》熊壮等编著的81页上有折半查找的方法。
2012-12-05 22:00
heroinearth
Rank: 10Rank: 10Rank: 10
来 自:云南曲靖
等 级:青峰侠
帖 子:430
专家分:1506
注 册:2011-10-24
收藏
得分:6 
我帮你改了下:
程序代码:
#include<stdio.h>
int main()
{
    int num[41],score[41],search,i,j,k,tem;
    for(i=0;;i++)
    {
         scanf("%d%d",&num[i],&score[i]);
         if((num[i]==-1)&&(score[i]==-1))
            break;

    }
    for(j=0;j<i-1;j++)
    {
        for(k=j+1;k<i;k++)
            if(num[j]>num[k])
            {
                    tem=num[k];
                num[k]=num[j];
                num[j]=tem;
                                tem=score[k];
                                score[k]=score[j];
                                score[j]=tem;
            }
    }
    scanf("%d",&search);
    j=0;
    while(1)
    if(search==num[(j+i)/2])
    {
         printf("%d",score[(j+i)/2]);
         break;
    }
    else if(search<num[(j+i)/2])
    {
        i=(j+i)/2;
    }
    else if(search>num[(j+i)/2])
    {
        j=(j+i)/2;
    }
        return 0;
}


 
2012-12-05 22:17
快速回复:折半查找。。。求教大神
数据加载中...
 
   



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

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