有序数组的二分查找
2017-04-13 10:58
302 查看
有序数组二分查找的基本原理:因为数组是有序的,先找到中间位置的值,如果目标比这个值大,那么该目标必定在数组的右半部分,以此循环或者递归,一直找到这个数值为止。此算法的时间复杂度为O(logN),N为数组的长度 (2的X次方 == N,所以复杂度即为 O(logn) )
public class SortedArrayBinarySearch { public static void main(String[] args) { int[] source=new int[]{1,3,5,7,9,12}; int key = 12; System.out.println(binaryRecurSearch(source, key));; System.out.println(binarySearchLoop(source, key));; } public static int binaryRecurSearch(int[] source, int key){ return binarySearchRecursive(source, key,0,source.length-1); } private static int binarySearchRecursive(int[] source, int key,int beginIndex,int endIndex){ int midIndex = (beginIndex+endIndex)/2; if(key<source[beginIndex] || key>source[endIndex] || beginIndex>endIndex){ return -1; } System.out.println("======="); if(key == source[midIndex]){ return midIndex; }else if(key > source[midIndex]){ return binarySearchRecursive(source, key, midIndex+1, endIndex); }else{ return binarySearchRecursive(source, key, beginIndex, midIndex-1); } } public static int binarySearchLoop(int[] source, int key){ int beginIndex = 0; int endIndex = source.length-1; while(true){ System.out.println("======="); if(key<source[beginIndex] || key>source[endIndex] || beginIndex>endIndex){ return -1; } int midIndex = (beginIndex+endIndex)/2; if(key == source[midIndex]){ return midIndex; }else if(key > source[midIndex]){ beginIndex = midIndex +1; }else{ endIndex = midIndex -1; } } } }
相关文章推荐
- 折半查找,也称二分查找、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。
- 符号表以及在有序数组中的二分查找
- 有序 循环数组的二分查找
- 在两个有序的数组中找第N个数,二分查找 O(lgm+lgn)级
- 算法-分割有序数组后查值-二分查找的变形
- 《数据结构与算法》学习笔记3 有序数组与二分查找
- 有序数组的二分查找
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- Search in Rotated Sorted Array 在旋转过的有序数组中进行二分查找 重点看解法二 三(重重)
- 有序数组转二分查找树的分治算法
- 二分法实现一个整形有序数组的二分查找
- 写一个函数,实现一个整形有序数组的二分查找
- 查找:链表顺序查找和有序数组二分查找
- 有序数组的二分查找
- 二分数组的扩展:二分查找循环有序数组
- 9.5-字符串有序数组的二分查找
- hiho1128 非有序数组的二分查找 (快速排序)
- 实现有序列表(基于数组,二分查找)
- 算法—8.有序数组中的二分查找
- 旋转有序数组的二分查找