首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求指出异常。在已经从小到大排序的数组中,输入一个数,用折半查找法求出该数是在数组的第几个数

2012-04-27 
求指出错误。在已经从小到大排序的数组中,输入一个数,用折半查找法求出该数是在数组的第几个数#include st

求指出错误。在已经从小到大排序的数组中,输入一个数,用折半查找法求出该数是在数组的第几个数
#include <stdio.h>
#define n 10
int compare(int x,int y)
{
/* compare x and y,return -1 for less than,0 for equal,
1 for greater */
if (x < y) return -1;
else if (x == y) return 0;
else return 1;
}
int binsearch(int list[],int searchnum, int left, int right)
{
/*search list[0]<=list[1]<=...<=list[n-1] for searchnum.
Return its position if found.Otherwise return-1 */
int middle;
while(left<=right){
middle=(left+right)/2;
switch(compare(list[middle], searchnum)){
case -1:left = middle + 1;
break;
case 0: return middle;
case 1: right = middle-1;
}
}
return-1;
}

void main(void)
{
int list[n],i,x,y;
int searchnum,left,right;
printf("generate the new number:\n ");
scanf("%d%d%d\n",&searchnum,&left,&right);
for(i=left;i<right-left+1;i++)
scanf("%d\n",&list[i]);
scanf("%d%d\n",&x,&y);

compare(x,y);
binsearch(list,searchnum,left,right);
printf("\n answear:\n ");
}


[解决办法]

C/C++ code
#include <stdio.h>#define n 10int compare(int x,int y){/* compare x and y,return -1 for less than,0 for equal,1 for greater */    if (x < y) return -1;    else if (x == y) return 0;    else return 1;}int binsearch(int list[],int searchnum, int left, int right){/*search list[0]<=list[1]<=...<=list[n-1] for searchnum.Return its position if found.Otherwise return-1 */    int middle;    while(left<=right){        middle=(left+right)/2;        switch(compare(list[middle], searchnum)){            case -1:left = middle + 1;            break;            case 0: return middle;            case 1: right = middle-1;        }        return binsearch(list, searchnum, left, right);// 递归    }    return-1;}void main(void){    int list[n],i,x,y;    int searchnum,left,right;    printf("generate the new number:\n ");    scanf("%d%d%d\n",&searchnum,&left,&right);    for(i=left;i<right-left+1;i++)        scanf("%d\n",&list[i]);    //scanf("%d%d\n",&x,&y);    //compare(x,y);    int loc;    loc = binsearch(list,searchnum,left,right);    printf("\n answear: %d\n ", loc+1);} 

热点排行