auto commit

This commit is contained in:
CyC2018 2018-03-09 14:03:15 +08:00
parent 47c90962f5
commit a8bf91e284

View File

@ -72,9 +72,7 @@ public int search(int key, int[] array) {
1. 在计算 mid 时不能使用 mid = (l + h) / 2 这种方式,因为 l + h 可能会导致加法溢出,应该使用 mid = l + (h - l) / 2。
2. 对 h 的赋值和循环条件有关,当循环条件为 l <= h 时h = mid - 1当循环条件为 l < h h = mid。
解释如下:在循环条件为 l <= h 时,如果 h = mid会出现循环无法退出的情况例如 l = 1h = 1此时 mid 也等于 1如果此时继续执行 h = mid那么就会无限循环在循环条件为 l < h如果 h = mid - 1会错误跳过查找的数例如对于数组 [1,2,3]要查找 1最开始 l = 0h = 2mid = 1判断 key < arr[mid] 执行 h = mid - 1 = 0此时循环退出直接把查找的数跳过了。
2. 对 h 的赋值和循环条件有关,当循环条件为 l <= h 时h = mid - 1当循环条件为 l < h h = mid。解释如下在循环条件为 l <= h 如果 h = mid会出现循环无法退出的情况例如 l = 1h = 1此时 mid 也等于 1如果此时继续执行 h = mid那么就会无限循环在循环条件为 l < h如果 h = mid - 1会错误跳过查找的数例如对于数组 [1,2,3]要查找 1最开始 l = 0h = 2mid = 1判断 key < arr[mid] 执行 h = mid - 1 = 0此时循环退出直接把查找的数跳过了。
3. l 的赋值一般都为 l = mid + 1。