| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 460 人关注过本帖
标题:求 指教犀利的折半查找法啊
只看楼主 加入收藏
GUnever
Rank: 2
等 级:论坛游民
帖 子:59
专家分:25
注 册:2012-3-3
结帖率:95.24%
收藏
已结贴  问题点数:10 回复次数:5 
求 指教犀利的折半查找法啊
1 到10  查找7  一个折半查找法 谢谢了
2012-04-15 16:45
墨清扬
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:294
专家分:817
注 册:2011-10-4
收藏
得分:2 
取左右端点的中间值,如果比预期小(升序下),就更新为左端点,不然就更新为右端点

酱油实习生
2012-04-15 20:55
love24114
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:223
专家分:399
注 册:2011-7-11
收藏
得分:2 
bsearch(),不谢
2012-04-15 21:07
darenwu1981
Rank: 1
等 级:新手上路
帖 子:4
专家分:4
注 册:2007-10-16
收藏
得分:2 
#include <stdio.h>

void half(int *a,int left, int right,int num)
{
    if(num == a[left])
    {
        printf("the loc is %d\n",left);
        return;
    }
    if(num == a[right])
    {
        printf("the loc is %d\n",right);
        return;
    }
   
   
    if(num > a[(left+right)/2])
    {
        left = (left+right)/2;
        half(a,left,right,num);
    }
    else if(num <  a[(left+right)/2])
    {
        right = (left+right)/2;
        half(a,left,right,num);
        
    }
    else
    {
        printf("the loc is %d\n",(left+right)/2);
        return;
    }
}
void main()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int num = 7;

    half(a,0,9,num);
}
2012-04-15 21:32
sunlang1234
Rank: 2
等 级:论坛游民
帖 子:47
专家分:77
注 册:2012-2-24
收藏
得分:2 
void main()
{
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    int num = 7;

    half(a,0,9,num);
}

void half(int *p,int min,int max,int num)
{
    int mid;
    mid = (min + max)/2;
    while(min <= max)
    {
        if(num > p[mid])
        {
            min = mid;
            mid = (min + max)/2;
        }
        else if(num < p[mid])
        {
            max = mid;
            mid = (min + max)/2;
        }
        else
        {
        
            break;
        }
    }
    printf("%d\n",mid);
}
2012-04-15 23:12
S_Ringo
Rank: 4
来 自:歌舞伎町
等 级:业余侠客
帖 子:94
专家分:230
注 册:2012-4-15
收藏
得分:2 
#include<stdio.h>
int main()
{
    int array[10]={1,3,5,7,9,11,13,15,17,19};
    int search;
    int l_point=0;                                                     //l_point为左下标,r_point为右下标;
    int r_point=9;
    printf("Input the number you want to search\n");
    scanf("%d",&search);
    if(search==array[r_point])                                         //因为除法是向下取整,因此,若查找的是最后一个数,下标达不到9,此处避免此种情况的死循环;
    {
        printf("Already exists,and it's the %dth number\n",r_point+1);
    }
    else                                                               //同理,若查找的是第一个数,下标可以达到0,此种情况可以放在while循环中;
    {
        while(l_point!=r_point)
        {
           if(search>array[(l_point+r_point)/2])
           {
               l_point=(l_point+r_point)/2;
           }
           else if(search<array[(l_point+r_point)/2])
           {
               r_point=(l_point+r_point)/2;
           }
           else
           {
               break;
           }
        }
          printf("Already exists,and it's the %dth number\n",(l_point+r_point)/2+1);
    }
    return(0);
}
2012-04-17 13:00
快速回复:求 指教犀利的折半查找法啊
数据加载中...
 
   



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

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