在前面的排序算法里面博主提到过二分查找算法,是使用递归的方式,下面博主分享一下二分查找算法的非递归方式
1.二分查找算法介绍
二分查找法只适用于从有序的数列中进行查找(比如数字,字母),将数列排序后再进行查找,二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步,假设从[0,99]的队列(100个数,即n=100)中寻找目标数30,则需要查找步数为log2 100,即最多查找7次(2^6 < 100 <2^7>)
案例: 数组{1,3,8,10,67,100},编程实现二分查找,要求使用非递归的方式完成
package com.self.tenAlgorithm;
public class BinarySearchNoRecur {
public static void main(String[] args) {
int[] arr = {1,3,8,10,67,100};
int search = binarySearch(arr, 100);
System.out.println(search);
}
/**
* @param arr 待查找的数组,arr是升序排序的数组
* @param value 想要查找的值
* @return 返回对应的下标 如果没有 返回-1
*/
public static int binarySearch(int[] arr,int value){
int left = 0;
int right = arr.length - 1;
while (left <= right){
int mid = (left + right) / 2;
if(arr[mid] == value){
return mid;
}else if(arr[mid] > value){
right = mid - 1;
}else{
left = mid + 1;
}
}
return -1;
}
}
本数组的是升序的数组,如果是降序的数组,代码做出相应的改变,由于二分查找比较简单,博主在这里不多解释
来源:CSDN
作者:代码编制世界
链接:https://blog.csdn.net/qq_44962429/article/details/103980490