黑马程序员技术交流社区
标题:
String类
[打印本页]
作者:
图兰朵
时间:
2016-3-28 02:46
标题:
String类
[code]package com.heima.homework13;
public class Demo2_Array {
/**
* A:案例演示
* 数组高级二分查找代码
* B:注意事项
* 如果数组无序,就不能使用二分查找。
* 因为如果你排序了,但是你排序的时候已经改变了我最原始的元素索引。
*/
public static void main(String[] args) {
int[] arr = {11,22,33,44,55,66,77};
System.out.println(getIndex( arr, 33));
System.out.println(getIndex( arr, 55));
System.out.println(getIndex( arr, 88));
}
public static int getIndex(int[] arr,int value) {
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while(arr[mid] != value) {
if (arr[mid] < value) {
min = mid + 1;
}else if (arr[mid] > value) {
max = mid - 1;
}
mid = (min + max) / 2;
if (min > max) {
return -1;
}
}
return mid;
}
}
这个代码里面如果我要找55所对应的索引的话,那就是min = mid + 1;那就是min = 3 + 1 = 4; max = 6; mid = (min + max) / 2 = (4 + 6) / 2 = 5,那5所对应的数是66啊 不是我要找的55啊? 这是怎么回事啊?
作者:
dxw
时间:
2016-3-28 07:14
本帖最后由 dxw 于 2016-3-28 08:10 编辑
索引对应的是【0.1.2.3.4.5.6】
第一次mid=3
min=mid+1=4
第二次mid=(3+6)/2=5
max=6-1=5第三次mid=(4+5)/2=4
查找结束
作者:
lvlup200
时间:
2016-3-28 08:30
图片中有文字叙述, 卤煮看看 明白了不?
解答.png
(86.92 KB, 下载次数: 7)
下载附件
2016-3-28 08:29 上传
作者:
haitao
时间:
2016-3-28 09:24
当mid+1=4后,会直接return mid.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2