二分查找用于有序数据集(有序数组,有序链表)查找元素位置
另所求元素为num
设置俩个“哨兵”:初始在最左侧的left(代表的索引为0),初始在最右侧的right(代表的索引为*.length-1)
用于和所求元素比较的mid =(left+right)/ 2
三个值的变化
若num小于索引为mid的元素,说明所求元素在中间偏左,则右侧哨兵right向左移动,right=mid-1, mid=(left+right)/ 2
若num大于索引为mid的元素,说明所求元素在中间偏右,则左侧哨兵left向右移动,left=mid+1, mid=(left+right)/ 2
若num等于索引为mid的元素,索引为mid的元素即为所求元素,返回mid为位置
若left>right,表明该数据集中没有所求元素,返回-1
public static int binarySearch(int num) {
int [] arr = {1,2,3,4,5,6,7,8,9};//有序数组
int left = 0;
int right = arr.length - 1;
int mid = (left+right)/2;
while(left<right) {
mid = (left+right)/2;
if(num==arr[mid]) {
return mid;
}else if(num<arr[mid]) {
right = mid-1;
}else {
left = mid+1;
}
}
return -1;
}
二分查找详解
6737

被折叠的 条评论
为什么被折叠?



