有个编程问题,,

[复制链接]
查看11 | 回复3 | 2010-10-6 08:37:29 | 显示全部楼层 |阅读模式
题目要求先输入十五个数,然后对这十五个数排序,之后再输入一个数,用对半查找法查找是不是在这输入的十五个数里面,如果在就输出这个数的位置,不在就输出“there is no such a number”,我前面的都对,就是在折半查找的时候找不出来,每次都是“there is no such a number”,我用VC里面的测试过了,就是那一步的K有问题,但是具体什么问题我不知道希望各位能帮忙!
#include
#define MEM 15
int order(int array[],int max)
{
for(int i=0;iarray[mid])
low=mid+1;
else high=mid-1;
}
return -1;
}
void main()
{
int mark[MEM];
coutmark;
}
cout>find;
/*int a[10]={12,52,86,95,125,145,163,196,200,254};
int m=search(a,95,10);cout<<"M="<<m<<endl;*/
int k=search(mark,find,MEM);//查找
if(k==-1)
{
cout<<"there is no such a number."<<endl;
}
else cout<<"the "<<k<<"number is you want"<<endl;
}

回复

使用道具 举报

千问 | 2010-10-6 08:37:29 | 显示全部楼层
在查找里多考虑两种情况if(key==array[mid]) return mid+1; else if(key==array[low]) return low+1; elseif(key==array[high])
return high+1;else 。。。int high=arr_size;改成int high=arr_size-1;注意上面mid+1,low+1,high+1,还有high=arr_size-1,这样做都是为了和你刚开始输入数据时第几个数相对应哈,比如array[0]就是第一个数。。接着把排序里的if(array<array[j])的小于改成大于
回复

使用道具 举报

千问 | 2010-10-6 08:37:29 | 显示全部楼层
#include#define MEM 15int order(int array[],int max){ for(int i=0;i<max;i++)for(int j=i+1;j<max;j++) if(array < array[j]) {
int t = array[
回复

使用道具 举报

千问 | 2010-10-6 08:37:29 | 显示全部楼层
好难
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行