想写个折半查找的程序发现死循环,求解原因。

刀刀很高 2016-02-17 04:26:52
package com.itheima.Day05;

public class ArrayFun {
public static void main(String[] args) {
int[]arr={3,6,8,12,19,36,444};


System.out.println(getIndex(arr,444));

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


if(key>arr[mid])
min=mid+1;
if(key<arr[mid])
max=mid-1;
if(key==arr[mid])
return mid;
}
return -1;
}
}
...全文
268 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
neversaygodbye 2016-02-19
  • 打赏
  • 举报
回复
将mid的赋值放在循环内,只在循环外定义 int mid; while(min<=max){ mid= (min+max)/2;
小鸡吃石子 2016-02-18
  • 打赏
  • 举报
回复
mid没更新啊
iamjsber 2016-02-17
  • 打赏
  • 举报
回复
可以小伙子
kx00450 2016-02-17
  • 打赏
  • 举报
回复
你判断后mid 值没变

public static int getIndex(int[] arr, int key) {
		int min = 0;
		int max = arr.length - 1;
		int mid = (min + max) / 2;
		while (min <= max) {
			if (key > arr[mid])
				min = mid + 1;
			    mid =  (min + max) / 2;
			if (key < arr[mid])
				max = mid - 1;
			    mid =  (min + max) / 2;
			if (key == arr[mid])
				return mid;
		}
		return -1;
	}


qq_28905485 2016-02-17
  • 打赏
  • 举报
回复
刀刀很高 2016-02-17
  • 打赏
  • 举报
回复
package com.itheima.Day05;

public class ArrayFun {
	public static void main(String[] args) {
		int[]arr={3,6,8,12,19,36,444};
		
		
		System.out.println(getIndex(arr,444));
		
	}
	public static int  getIndex(int[]arr,int key){
		int min=0;
		int max=arr.length-1;
		int mid= (min+max)/2;
		while(min<=max){
			
			
			if(key>arr[mid])
				min=mid+1;
			if(key<arr[mid])
				max=mid-1;
			if(key==arr[mid])
				return mid;
		}
		return -1;
	}
}

62,614

社区成员

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

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