Java编程:二分查找算法实现代码
二分查找算法
又叫折半查找,要求待查找的序列有序。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程,如果中间位置的值比待查关键字小, 则在后半部分循环这个查找的过程。直到查找到了为止,否则序列中没有待查的关键字。
注意:排序规则与数组的排序顺序有关, 即从大到小排序和从小到大排序是不一样的,并且乱序是不能用二分查找算法的。
下面用代码实现进一步了解二分查找算法: 方法一:循环
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// int []arr = {1,2,3,3,4,10};
// int target = 3;
int []arr = {
1,2,3,3,4,10};
int target = 6 ;//设定要查找的元素
//调用binarySearch()方法查找该元素在arr数组中的下标位置
int index = binarySearch(arr, target);
System.out.println(index);//打印输出这个元素的下标
}
//二分查找方法
public static int binarySearch(int []arr,int num) {
int min = 0;//起始元素
int max = arr.length-1;//结束元素
int mid = 0;//中间元素
while(min<=max) {
mid = (max+min)/2;
if(num<arr[mid]) {
max = mid-1;
}if(num>arr[mid]) {
min = mid+1;
}if(num==arr[mid]) {
return mid;//找到了
}
}
return -1;//未找到
}
方法二:递归
public static void main(String[] args) {
// int []arr = {1,2,3,3,4,10};
// int target = 3;
int []arr = {
1,4,4,5,7,7,8,9,9,10};
int target = 1;
int index = binarySearch(arr, target,0,arr.length-1);
System.out.println(index);
}
//二分查找方法
//arr 该数组 num 要查找的数 min 初始元素 max结束元素
public static int binarySearch(int []arr,int num,int min,int max) {
int mid = (min+max)/2;//中间元素
if(min>max) {
return -1;//递归结束,没找到
}
//查找的数比中间元素小,返回中间元素最右边的元素
if(num<arr[mid]) {
return binarySearch(arr, num, min, mid-1);
//查找的数比中间元素大,返回中间元素最左边的元素
}else if(num>arr[mid]) {
return binarySearch(arr, num, mid+1, max);
}else {
return mid;//找到了
}
}
上一篇:
IDEA上Java项目控制台中文乱码
