package com.hcw.query;
public class TestBinarySearch {
public static void main(String[] args) {
int[] arr = {3,13,36,45,78,98,109};
System.out.println("99应该插入的位置" + binarySearch_3(arr, 99));
}
/**
* 折半查找
* @param arr 查找的数组
* @param key 查找关键字
* @return
*/
public static int binarySearch(int[] arr,int key){
int low = 0;
int high = arr.length-1;
int middle = low+(high-low)/2;//注意不要写成middle=(low+high)/2;会有溢出的可能middle = low+(high-low)/2;防止溢出
while(key!=arr[middle]){
if(key > arr[middle]){
low = middle+1;
}else if(key < arr[middle]){
high = middle-1;
}
if(high < low){
return -1;
}
middle = (low+high)/2;
}
return middle;
}
/**
* 折半查找
* @param arr 查找的数组
* @param key 查找关键字
* @return
*/
public static int binarySearch_2(int[] arr,int key){
int low = 0;
int high = arr.length-1;
int middle;
while(low <= high){
middle = (low+high)>>1;//通过移位操作实现 除2操作
if(key > arr[middle])
low = middle + 1;
else if(key < arr[middle])
high = middle - 1;
else
return middle;
}
return -1;
}
/**
* 折半查找 插入点
* @param arr 查找的数组
* @param key 查找关键字
* @return
*/
public static int binarySearch_3(int[] arr,int key){
int low = 0;
int high = arr.length-1;
int middle;
while(low <= high){
middle = (low+high)>>1;
if(key > arr[middle])
low = middle + 1;
else if(key < arr[middle])
high = middle - 1;
else
return middle;
}
return low;
}
}
查找算法之折半查找
最新推荐文章于 2022-08-14 20:12:56 发布