辽宁省锦州市住房与城乡建设厅网站,电子商务软文写作,阿里云 上传wordpress,石家庄网站制作工具二分查找是一种很常见的查找算法#xff0c;重要的是边界的处理和循环的起止条件
使用二分查找的话#xff0c;首先接收的数组一定是有序的。确定边界。在头一次循环中#xff0c;左边界也就是索引下标为0的位置#xff0c;右边界是数组的长度-1.确定循环起止条件。当左边… 二分查找是一种很常见的查找算法重要的是边界的处理和循环的起止条件
使用二分查找的话首先接收的数组一定是有序的。确定边界。在头一次循环中左边界也就是索引下标为0的位置右边界是数组的长度-1.确定循环起止条件。当左边界 l r 右边界时循环成立。此时的l和r类似于双指针指向数组的位置。在循环过程中没有找到目标值时根据目标值和m的大小再次确定左右边界的选取范围。当中间值 a[m] target 时即找到目标值返回目标值下标m。而当 l r 时 也就代表着未找到数据返回 -1注意点在求m的大小时可能会出现数据溢出的情况。正常情况 m (l r) / 2 向下取整。为了避免数据溢出当数组长度很大时并且数据处于数组中的右部分有可能会出现数据溢出我们可以使用右移一位的方式位运算等价于除以2前提是正整数。还可以使用 m l (r - l) / 2 ; 的方式避免数据过大造成溢出代码如下
public static int binarySearch(int[] a, int t) {int l 0, r a.length - 1, m;while (l r) {m (l r) / 2;//m (l r) 1;//m l (r - l) / 2;if (a[m] t) {return m;} else if (a[m] t) {r m - 1;} else {l m 1;}}return -1;}