我是学习java的新手,看了老师的代码,但是不明白思路,大侠帮我分析一下思路,步骤谢谢你

dulei85328885 2012-06-14 05:35:08
class Lianx
{
public static void main(String[] args)
{

int[] arr={2,4,5,7,19,32,45};
int index=halfsearch(arr,32);
System.out.println(index);

}
public static int halfsearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(max+min)/2;

while(arr[mid]!=key)
{
if(key>arr[mid])
min =mid+1;
else if(key<arr[mid])
max=mid-1;

mid=(max+min)/2;
}
return mid;
}
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangfeihu 2012-06-16
  • 打赏
  • 举报
回复
public static int halfsearch(int[] arr,int key)
{

int low = 0;
int high = arr.length - 1;
while (low <= high)
{
int mid = (low+high)/2;
if (key < arr[mid])
{
high = mid - 1;
}
else if (key > arr[mid])
{
low = mid + 1;
}
else {
return mid;
}
}
return -1;
}
yangfeihu 2012-06-16
  • 打赏
  • 举报
回复
的确写的不咋地
这样写就简单了
public static int halfsearch(int[] arr,int key)
{

int low = 1;
int high = arr.length - 1;
while (low <= high)
{
int mid = (low+high)/2;
if (key < arr[mid])
{
high = mid - 1;
}
else if (key > arr[mid])
{
low = mid + 1;
}
else {
return mid;
}
}
return -1;
}
VanBaston 2012-06-14
  • 打赏
  • 举报
回复
这个程序还是有bug的如果你查询的数据不存在的话,就会形成死循环了
VanBaston 2012-06-14
  • 打赏
  • 举报
回复
这个好像是二分查找吧
开始时:
min为最小数
max为最大数
mid为中间的一个数

while先最判断 第mid个数是不是你要查找的数
不是就比较这个数和你要查找的树的大小关系
如果key > arr[mid];则说明你要查找的树在 mid 和 max之间,
这个时候就把mid赋值给min,然后再在min和max的中间的数给mid,
同样如果key < arr[mid],则说明你要查找的数在 min 和 mid之间
这个时候就把min赋值给max,然后再在min和max的中间的数给mid
这样经过一轮后,就把查找的范围缩小了一半,
这样一次循环下去直到找到查找的值。

23,404

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧