首页 > 试题广场 >

已知有序序列bcdefgqrst,则在二分查找关键字b的过程

[单选题]
int left = 0;                                                                       
int right = nums.length - 1;                                      
int mid = left + (right - left) / 2;                      
while(left < right) {
  if (nums[mid] < target) {
    left = mid + 1;                                                        
  } else if (nums[mid] >= target) {
    right = mid;                                                             
  }
  mid = left + (right - left) / 2;
}
return mid;


已知有序序列b c d e f g q r s t,则在二分查找使用如上代码查找关键字b的过程中,先后进行比较的关键字依次是多少?()
  • f  d   b
  • f  d  c  b
  • f  c  b
  • f  c  d  b
难道2分还有固定写法? 我就喜欢定位n/2+1不行吗
发表于 2020-09-22 14:08:12 回复(8)
二分当遇到偶数时,要么用 n / 2 + 1定位,要么用 n / 2 - 1 定位,但是不管用哪一种,程序从始至终都是那一种,
假如用n / 2 + 1,那么顺序将会是 g, d, c, b
假如使用n / 2 - 1,那么顺序将会是f, c, b
发表于 2020-10-27 19:08:59 回复(0)
应该多选,题目是死的,代码是活的。
发表于 2020-10-18 11:31:22 回复(0)
没懂,有谁帮我解答以下,下面代码是这样的
int left = 0;																		// 0
int right = nums.length - 1;										// 9
int mid = left + (right - left) / 2;						
while(left < right) {
  if (nums[mid] < target) {
    left = mid + 1;															
  } else if (nums[mid] >= target) {
    right = mid;																
  }
  mid = left + (right - left) / 2;
}
return mid;

/*
	1. mid = 4;   nums[mid] = f;   right = 4;    mid = 2
	2. mid = 2;   nums[mid] = d;   right = 2;    mid = 1
	3. mid = 1;   nums[mid] = c;   right = 1;    mid = 0;
	4. mid = 0;   mums[mid] = target;    right = 0 = left;    跳出循环,返回 mid
 */
f  d  c  b

发表于 2020-11-19 15:04:04 回复(0)