7个回答
展开全部
你对对半查找理解错了,你的min,max应该是下标而不是值
原理:类似于二分法解方程,二分查找首先比对序列中间的数是否是要找的数,如果不是,由于是有序数列,则看其在左侧区间还是右侧区间,舍弃不在的那一半区间,然后在剩余的区间重复刚才的办法,直到找到该数,由于每次舍弃一半的数据量,所以查找效率较高。
描述:设三个变量 left,right,middle分别为序列的两侧下标和中间下标,当判断出不在左侧区间,则 left=middle+1 ,从而利用右侧一半构造出一个新区间,否则 right=middle-1,利用左边一侧构造新区间,然后重复刚才过程,如此下去,要么找到数据,要么left>right,此时也应该停止查找,说明序列中没有该数。
原理:类似于二分法解方程,二分查找首先比对序列中间的数是否是要找的数,如果不是,由于是有序数列,则看其在左侧区间还是右侧区间,舍弃不在的那一半区间,然后在剩余的区间重复刚才的办法,直到找到该数,由于每次舍弃一半的数据量,所以查找效率较高。
描述:设三个变量 left,right,middle分别为序列的两侧下标和中间下标,当判断出不在左侧区间,则 left=middle+1 ,从而利用右侧一半构造出一个新区间,否则 right=middle-1,利用左边一侧构造新区间,然后重复刚才过程,如此下去,要么找到数据,要么left>right,此时也应该停止查找,说明序列中没有该数。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-24
展开全部
折半查找的基本思想是:对于有序表,查找时先取表中间位置的记录关键字和所给关键字进行比较,若相等,则查找成功;如果给定值比该记录关键字大,则在后半部分继续进行折半查找;否则在前半部分进行折半查找,直到查找范围为空而查不到为止。
折半查找的过程实际上死先确定待查找元素所在的区域,然后逐步缩小区域,直到查找成功或失败为止。
算法中需要用到三个变量,low表示区域下界,high表示上界,中间位置mid=(low+high)/2
算法:
#define MAXLEN n
......
......
int binsearch(DATATYPE A[],int k)
{
int low,high;
low=0;
high=MAXLEN-1;
while(low<=high)
{
mid=low+high)/2;
if(k==A[mid].key)
return mid; //查找成功,返回被查元素在表中的相对位置
else if(k>A[mid].key)
low=mid+1;
else
high=mid-1;
}
return -1; //查找失败,返回-1
}
这只是算法,运用要靠你自己!
折半查找的过程实际上死先确定待查找元素所在的区域,然后逐步缩小区域,直到查找成功或失败为止。
算法中需要用到三个变量,low表示区域下界,high表示上界,中间位置mid=(low+high)/2
算法:
#define MAXLEN n
......
......
int binsearch(DATATYPE A[],int k)
{
int low,high;
low=0;
high=MAXLEN-1;
while(low<=high)
{
mid=low+high)/2;
if(k==A[mid].key)
return mid; //查找成功,返回被查元素在表中的相对位置
else if(k>A[mid].key)
low=mid+1;
else
high=mid-1;
}
return -1; //查找失败,返回-1
}
这只是算法,运用要靠你自己!
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询