解题思路:
使用双向指针 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语言程序设计教程(第三版)课后习题9.1 (Java代码)浏览:481 |
简单的a+b (C语言代码)浏览:601 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1072 |
C语言程序设计教程(第三版)课后习题9.8 (C语言代码)浏览:646 |
【明明的随机数】 (C语言代码)浏览:845 |
printf基础练习2 (C语言代码)浏览:547 |
用筛法求之N内的素数。 (C语言代码)浏览:595 |
大神老白 (C语言代码)浏览:637 |
交换Easy (C语言代码)浏览:805 |
1134题解(求分析)浏览:795 |