| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖, 1 人收藏
标题:折半查找法,帮看看哪里错了,
取消只看楼主 加入收藏
zijinmaoyi
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-10
结帖率:0
收藏(1)
 问题点数:0 回复次数:1 
折半查找法,帮看看哪里错了,
输入要查找的数字x后没反应
#include <stdio.h>

int main(int argc, char *argv[])
{
    int i,j,t,n,x,w,a[100000];
    printf("请输入n的值:\n");
    scanf("%d",&n);
    printf("请输入n个正整数:\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("先对数组a进行排序:\n");
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    printf("%d个数由小到大排序为:\n",n);
    for(i=0;i<n;i++)
    printf("%d,",a[i]);
    printf("\n");
    printf("请输入要查找的数字:\n");
    scanf("%d",&x);
    for(i=n/2;i>=0;i<n)
    {
        if(x==a[i])
        {
            w=i+1;
        }
        else
        if(x<a[i])
        {
            i=n/2-1;
        }
        else  i=n/2+1;
    }
    printf("%d的位置是第%d个。",x,w);
    return 0;
}
搜索更多相关主题的帖子: 折半 
2010-10-10 16:32
zijinmaoyi
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2010-10-10
收藏
得分:0 
谢谢cacker提供的函数!
修改后如下:

第一种
#include <stdio.h>

int main(int argc, char *argv[])
{
    int HalfSearch(int array[], int nLength, int value);
    int i,j,t,n,x,w,a[100000];
    printf("请输入n的值:\n");
    scanf("%d",&n);
    printf("请输入n个正整数:\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("先对数组a进行排序:\n");
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    printf("%d个数由小到大排序为:\n",n);
    for(i=0;i<n;i++)
    printf("%d,",a[i]);
    printf("\n");
    printf("请输入要查找的数字:\n");
    scanf("%d",&x);
    w=HalfSearch(a, n, x);
    if(w>=0)
    {
        printf("%d的位置是第%d个。",x,w);
    }
    else
    {
        printf("错误!");
    }
    return 0;
}
//功能: 折半查找法   注:必须先排序 并且是升序
//参数: arrary 目的数组, nLength数组长度, value 要查找的数据
//返回: 如果有这个数组,就返回在数组里的位置,如果没有返回-1
int HalfSearch(int array[], int nLength, int value)
{
    int nIndex =-1;                    
    int mid = 0;                       //中间位置
    int left = 0;
    int right = nLength - 1;
   
    while(left <= right)
    {
        mid = (left + right)/2 ;      
        if ( value == array[mid])
        {
            nIndex = mid+1 ;
            break ;
        }
        else if (value < array[mid])
            right = mid - 1;
        else
            left = mid + 1;
    }
   
   
    return nIndex;
}




第二种
#include <stdio.h>

int main(int argc, char *argv[])
{
    int HalfSearch(int array[], int nLength, int value);
    int i,j,t,n,x,w,a[100000];
    printf("请输入n的值:\n");
    scanf("%d",&n);
    printf("请输入n个正整数:\n");
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    printf("先对数组a进行排序:\n");
    for(j=0;j<n-1;j++)
        for(i=0;i<n-1-j;i++)
            if(a[i]>a[i+1])
            {
                t=a[i];
                a[i]=a[i+1];
                a[i+1]=t;
            }
    printf("%d个数由小到大排序为:\n",n);
    for(i=0;i<n;i++)
    printf("%d,",a[i]);
    printf("\n");
    printf("请输入要查找的数字:\n");
    scanf("%d",&x);
    int l=0,r=n-1;
    while(l<=r)
    {
        i=(l+r)/2;
        if(x==a[i])
        {
            w=i+1;
            break;
        }
        else
        if(x<a[i])
        {
            r=i-1;
        }
        else  l=i+1;
    }
    if(w>=0)
    {
        printf("%d的位置是第%d个。",x,w);
    }
    else
    {
        printf("错误!");
    }
    return 0;
2010-10-10 18:17
快速回复:折半查找法,帮看看哪里错了,
数据加载中...
 
   



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

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