已有258人关注
求解答
发表在Java答疑区 2017-02-28
是否精华
版块置顶:

int[] array = {  112  ,114  ,118  ,123  ,132  ,135  ,146  ,155  ,162  ,165  };

System.out.print("请输入待查找元素:  ");

int low = 0, suo = 0, high = array.length-1 ;

Scanner scanner = new Scanner(System.in);

int x = scanner.nextInt();

while (low <= high) {

suo = (low + high) / 2;

if (array[suo] < x)

low = suo + 1;

else

high = suo - 1;


if (array[suo] == x) {

System.out.println("此元素在数组中的索引为::" + suo);

}


}上面是源代码,我发现将high = array.length-1 ;改为high=array.length也可以运行,那么两者有什么具体区别?此外,如果将int low = 0, suo = 0, high = array.length-1 ;改为int low = 1, suo = 0, high = array.length ;除了不能输出第一个元素的索引外,其余都能输出,那么为什么不能输出第一个元素的索引呢?

分享到:
精彩评论 4
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2017-03-01
沙发
  1. 这里的high变量用于记录查询索引上限。

  2. 因为你把起始索引0改成了1,所以在折半查找的时候,索引值就乱了,你可以在纸上写一下各个值的变化过程。

A monologue_1486542496
学分:13 LV2
2017-03-05
板凳

呃呃,那个起始索引我后来想了下明白了,但那个high变量还是没弄明白,如果int low = 0, suo = 0, high = array.length,那么0索引也可以输出,那和high=array.length-1不就没什么功能性的区别了?

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2017-03-06
地板

array.length表示元素个数,array.length-1表示最大索引,如果调用了array[array.length]这么一个值,就要跑出下标越界的异常了

A monologue_1486542496
学分:13 LV2
2017-03-06
4L

您说的我都知道,但是程序运行却可以。。。。。。所以我才不明白。。。。

首页上一页 1 下一页尾页 4 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照