黑马程序员技术交流社区
标题:
java二分查找法,怎么弄
[打印本页]
作者:
zyh1578814923
时间:
2015-11-21 22:18
标题:
java二分查找法,怎么弄
作者:
李凯666
时间:
2015-11-21 22:18
ublic class erfen {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr = {11,22,33,66,88,99};
System.out.println(getIndex(arr,55));
}
public static int getIndex(int[] arr,int x){
int min = 0;
int max = arr.length-1;
int mid =(min+max)/2;
while (arr[mid] != x) {
if (arr[mid] < x) {
min =mid+1;
}else if (arr[mid] > x) {
max = mid-1;
}
if (min>max) {
return -1;
}
mid = (min+max)/2;
}
return mid;
}
}
基本就是这样
作者:
萧未然
时间:
2015-11-22 14:33
是这样,找出了下标
作者:
1191065242
时间:
2016-5-1 16:52
public static void main(String[] args) {
//二分法的查找前提是讲数组排序了,如何排序你可以自己用冒泡和选择
int[] arr = {12,23,34,45,56,67,78};
getIndex(arr);
}
private static int getIndex(int[] arr) {
Scanner sca = new Scanner(System.in);
System.out.println("现在输入你要查找的数字,如果不存在-1给你返回");
int num = sca.nextInt();
int min = 0; //定义最小值,数组都是从0开始的
int max = arr.length - 1; //定义最大值,最大值是你获取的长度-1
int mid = (min + max) / 2; //获取中间数
while (arr[mid] != num) { //判断数组中间数跟你传来的数是不是相等
if(arr[mid] > num) { //判断数组中间数是不是大于你传来的数
max = mid - 1; //说明你的数小于中间数现在把你的最大值变为mid - 1
}else if(arr[mid] < num) { //判断数组中间数是不是小于你传来的数
min = mid + 1; //说明你的数小于中间数现在把你的最小值变为mid + 1
}
mid = (min + max) / 2; //根据上面的变化将你的mid的值重新分配新值
if(min > max) {
System.out.println("数字不存在");
return -1;
}
}
System.out.println("你输入的数字在"+mid+"的位子上");
return mid;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2