二分查找点击标题可以查看详情
二分查找是一种查询效率非常高的查找算法。又称折半查找。 是一种在 有序数组 中 查找某一特定元素 的搜索算法。 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。 时间复杂度:折半搜索每次把搜索区域减少一半,时间复杂度为O(log n)。(n代表集合中元素的个数) 空间复杂度: O(1)。虽以递归形式定义,但是尾递归,可改写为循环。
源代码运行单个java,且不能带包名
/* * This is a orion editor sample. */ public class PomitTest { public static void main(String[] args) { int[] arr = {1,3,5,7,9,11}; int key = 4; int position = recursionBinarySearch(arr,key,0,arr.length - 1); if(position == -1){ System.out.println("查找的是"+key+",序列中没有该数!"); }else{ System.out.println("查找的是"+key+",找到位置为:"+position); } } /** * 使用递归的二分查找 *title:recursionBinarySearch *@param arr 有序数组 *@param key 待查找关键字 *@return 找到的位置 */ public static int recursionBinarySearch(int[] arr,int key,int low,int high){ if(key < arr[low] || key > arr[high] || low > high){ return -1; } int middle = (low + high) / 2; //初始中间位置 if(arr[middle] > key){ //比关键字大则关键字在左区域 return recursionBinarySearch(arr, key, low, middle - 1); }else if(arr[middle] < key){ //比关键字小则关键字在右区域 return recursionBinarySearch(arr, key, middle + 1, high); }else { return middle; } } }
运行代码 运行代码
运行结果: