| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1449 人关注过本帖
标题:这个用二分查找怎么做(已迷一个多小时了)
只看楼主 加入收藏
天衣boy
Rank: 1
来 自:中国河南
等 级:新手上路
帖 子:99
专家分:0
注 册:2016-10-20
结帖率:69.23%
收藏
已结贴  问题点数:4 回复次数:5 
这个用二分查找怎么做(已迷一个多小时了)
#include<stdio.h>
int main()
/*{
    int array[10];
    int low,high,mid,target;
    scanf("%d",&target);
    while(low<=high)
        {
            int mid=(low+high)/2;
            if(array[mid]>target)
                high=mid-1;
            else if(array[mid]<target)
            low=mid+1;
            else
                return mid;
        }
    return-1;
}*/
{
   
    int a[10];
    int i,n,mid,x,low,high;
    scanf("%d",&n);
    for(i=1;i<=n;++i)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&x);
    low=1;
    high=n;
    while(low<=high)
{
mid=(high+low)/2;
if(a[mid]>x)
high=mid-1;
else if(a[mid]<x)
low=mid+1;
else
return mid;
}
return x;
}







/*for(i=1;i<=n;++i)
{
mid=(1+n)/2;
    if(x>a[mid])
    a[1]=a[mid+1];
    else if(x<a[mid])
    a[n]=a[mid-1];
   
    if(x==a[mid])
    {
   
    printf("%d",mid);
    break;
    }
}
return x;

}*/
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: target return include 
2016-12-15 14:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:2 
不看贴图
实在不会,就抄袭一下 C标准函数bsearch 的源码
2016-12-15 14:37
天衣boy
Rank: 1
来 自:中国河南
等 级:新手上路
帖 子:99
专家分:0
注 册:2016-10-20
收藏
得分:0 
回复 2楼 rjsp
ok

刚学习小半年   ,   努力成为专家
2016-12-15 14:55
天衣boy
Rank: 1
来 自:中国河南
等 级:新手上路
帖 子:99
专家分:0
注 册:2016-10-20
收藏
得分:0 
回复 楼主 天衣boy
调用函数的会了,但是不调用函数就不会了   你能写一下不调用函数的么
#include <stdio.h>
int search(int arr[],int len,int num)//arr为序列,len为序列长度,num为要查找的数
{
    int start,end,mid;
    start=0;
    end=len-1;
    mid=(start+end)/2;
    while(start<=end)
    {
        if(arr[mid]>num)
        {
            end=mid-1;
            mid=(start+end)/2;
            continue;
        }
        if(arr[mid]<num)
        {
            start=mid+1;
            mid=(start+end)/2;
            continue;
        }
        return mid+1;
    }
    return -1;
}

int main()
{
    int a[100],i,m,num,pos;
    printf("输入序列长度:");
    scanf("%d",&m);
    printf("输入一个长度为%d的有序序列:\n",m);
    for(i=0;i<m;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("输入你要查找的数:");
    scanf("%d",&num);
    pos=search(a,m,num);
    if(pos==-1)
        printf("未能在序列中找到你要查找的数。\n");
    else
        printf("你要查找的数在第%d个位置\n",pos);
    return 0;
}

刚学习小半年   ,   努力成为专家
2016-12-15 15:11
求学的兔子
Rank: 2
等 级:论坛游民
帖 子:21
专家分:46
注 册:2016-11-11
收藏
得分:2 
程序代码:
#include <stdio.h>

int main()
{
    int a[100],i,m,num,pos=0,flag=0;
    int start=0,end,mid;
    printf("输入序列长度:");
    scanf("%d",&m);
    end=m-1;
    printf("输入一个长度为%d的有序序列:\n",m);
    for(i=0;i<m;i++)
    {
        scanf("%d",&a[i]);
    }
    if(a[0]>a[1])
    flag = -1;
    else
    flag = 1;
    printf("输入你要查找的数:");
    scanf("%d",&num);
    mid=(start+end)/2;
    while(start<=end)
    {
        if(flag == 1)
        {
            if(a[mid]>num)
            {
                end=mid-1;
                mid=(start+end)/2;
                continue;
            }
            if(a[mid]<num)
            {
                start=mid+1;
                mid=(start+end)/2;
                continue;
            }    
        }
        else
        {
            if(a[mid]<num)
            {
                end=mid-1;
                mid=(start+end)/2;
                continue;
            }
            if(a[mid]>num)
            {
                start=mid+1;
                mid=(start+end)/2;
                continue;
            }
        }
        pos=mid+1;
        break;
    }
    if(!pos)
    pos = -1;
    if(pos==-1)
        printf("未能在序列中找到你要查找的数。\n");
    else
        printf("你要查找的数在第%d个位置\n",pos);
    return 0;
}

在你的基础上改的 不调用函数来, 还有你的代码少了判断输入的数列是递增的还是递减的。
2016-12-15 15:40
tm00
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-10-29
收藏
得分:2 
2016-12-16 19:53
快速回复:这个用二分查找怎么做(已迷一个多小时了)
数据加载中...
 
   



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

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