解题思路:
使用双向指针 left right 记录 左右范围
如果left > right 查找结束
设置 m = (left + right) >>> 1 ,m为中间索引 (可更改为 m = left + right / 2, 使用无符号右移 避免数据过大超出int范围)
判断target值与左右指针的关系 如果此时m位置 小于 target 缩小right 反之 增大left 并返回 判断条件
直到left > right
注意事项:
数组必须为有序递增
参考代码:
public static int[] binarySearch(int[] a, int target){ //指针和初值 int left = 1, right = a.length; while (1 < right - left){ //j - i范围内待查找的范围个数 //在这里没有办法理解 >>>进位符的,可以使用:int middle = beginIndex + ((endIndex-beginIndex)/2); // >> 带符号右移 int m = (left+right) >>> 1; // int m = (i + j)/ 2;//获取中间索引 if (target < a[m]){ right = m; //小于中间值 } else { left = m; } } int tmp = a[0]; for (int i = 0; i < left; i++) { a[i] = a[i+1]; } a[left] = tmp; return a; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题11.12 (C语言代码)浏览:727 |
简单的a+b (C语言代码)浏览:726 |
C语言训练-立方和不等式 (C语言代码)浏览:751 |
回文串 (C语言代码)浏览:2860 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1312 |
C语言程序设计教程(第三版)课后习题6.11 (C语言代码)浏览:549 |
简单的for循环浏览:1421 |
WU-拆分位数 (C++代码)浏览:789 |
C语言程序设计教程(第三版)课后习题6.8 (C语言代码)浏览:529 |
哥德巴赫曾猜测 (C语言代码)浏览:2352 |