我运行你的代码 发现 你的程序 在 left=6, right=7 也就是 在12 和 24 这两个数之间不停的循环 ,程序进入了死循环
你发现没有 这时候你的CPU是消耗很大的,因为程序进入了死循环不停的在 12 和24 之间做比较
为什么呢?我给你分析一下
第一次
left=0 right=7 mid=3, 对应的分别是 1,24,6, arr[mid]=6 显然23>arr[mid]
第二次
left=3, right=7, mid=5,对应的分别是 6,24,9, arr[mid]=9 显然 23>arr[mid]
第三次
left=5,right=7,mid=6, 对应的分别是9,24,12, arr[mid]=12 ,显然23>arr[mid]
第四次
left=6,right=7,mid=6,对应的分别是12,24,12 arr[mid]=12 ,显然23>arr[mid]
第五次
left=6,right=7,mid=6,对应的分别是12,24,12 arr[mid]=12 ,显然23>arr[mid]
。。。
。。。
。。。
所以循环一直 在这里循环
所有没有结果 永远这样循环下去,知道天荒地老!
解决的办法是 你应该这样写
right=mid-1
left=mid+1
因为当你判断 (key<arr[mid]) 或者 (key>arr[mid]) 时
arr[mid] 这个数已经比较过了,所有索引 right, left就必须 移动 要么减一 要么加一
|