| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 451 人关注过本帖
标题:二分查找出了个错
只看楼主 加入收藏
nikobelic
Rank: 2
等 级:论坛游民
帖 子:37
专家分:30
注 册:2012-5-26
结帖率:25%
收藏
 问题点数:0 回复次数:2 
二分查找出了个错
第一个元素和最后一个元素查找不到  求解[/color]
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void insertSort(int a[],int n)
{
    int i,j;
    for(i=2;i<=n;i++)
    {
        a[0] = a[i];
        j = i-1;
        while(a[0] < a[j])
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = a[0];
    }
}
int binarySearch(int a[],int n,int key)
{
    int mid,high,low;
    high = n;
    low = 1;
    while(low < high)
    {
        mid = (low+high)/2;
        if(key < a[mid])
            high = mid - 1;
        else if(key > a[mid])
            low = mid + 1;
            else if(a[mid] == key)
                return mid;
    }
    return -1;
}

int main()
{
    int a[11],i,key;
    srand((unsigned long)time(0));
    for(i = 1 ; i <= 10; i++)
    {
        a[i] = rand() % 100;
    }
    insertSort(a,10);
    for(i = 1 ; i <= 10 ; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\nKEY : ");
    scanf("%d",&key);
    printf("The index of %d is %d\n",key,binarySearch(a,10,key));
    return 0;
}
2013-04-07 20:46
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void insertSort(int a[],int n)
{
    int i,j;
    for(i=2;i<=n;i++)
    {
        a[0] = a[i];
        j = i-1;
        while(a[0] < a[j])
        {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = a[0];
    }
}
int binarySearch(int a[],int n,int key)
{
    int mid,high,low;
    high = n;
    low = 1;
    while(low <= high)/*少了=*/
    {
        mid = (low+high)/2;
        if(key < a[mid])
            high = mid - 1;
        else if(key > a[mid])
            low = mid + 1;
            else /*if(a[mid] == key)这个不需要*/
                return mid;
    }
    return -1;
}


int main()
{
    int a[11],i,key;
    srand((unsigned long)time(0));
    for(i = 1 ; i <= 10; i++)
    {
        a[i] = rand() % 100;
    }
    insertSort(a,10);
    for(i = 1 ; i <= 10 ; i++)
    {
        printf("%d ",a[i]);
    }
    printf("\nKEY : ");
    scanf("%d",&key);
    printf("The index of %d is %d\n",key,binarySearch(a,10,key));
      return 0;
}
改成这样就可以了
2013-04-07 22:04
nikobelic
Rank: 2
等 级:论坛游民
帖 子:37
专家分:30
注 册:2012-5-26
收藏
得分:0 
回复 2楼 helloUJS
多谢
2013-04-10 21:22
快速回复:二分查找出了个错
数据加载中...
 
   



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

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