二分查找
2017-08-02 17:41
239 查看
1、基本思想:每次将序列中间值与待查找的元素值作比较,每次将搜索区间缩小一半,直到缩小到一个对象为止。
2、二分查找要求:必须顺序存储、 必须按关键码大小有序排序
3、实现步骤:
对数组进行排序
找到序列的中间位置mid = (low+high)/2,low=0,high=array.length-1,比较array[mid]与待查找元素值x的大小
如果array[mid]==x,那么返回元素在数组中的位置,如果array[mid]<x,则low = mid+1, 否则high = mid-1
继续同样的操作,直到low>high,还没找到就返回-1
4、代码实现
12345678910111213141516//折半查找算法,需要先进行排序,循环方式public int binarySearch(int[] array, int x){ Arrays.sort(array); int low = 0, high = array.length-1; int mid = 0; while(low<=high){ mid = (low+high)/2; if(array[mid]==x) return mid; else if(array[mid]>x) high = mid-1; else low = mid+1; } return -1;}//递归方法,空间复杂度O(logn)public int binarySearch(int[] array, int x, int low, int high){ int mid = 0; if(low<=high){ mid = (low+high)/2; if(array[mid]==x) return mid; else if(array[mid]>x) return binarySearch(array,x,low,mid-1); else return binarySearch(array,x,mid+1,high); } return -1;}
5、时间复杂度:O(logn)
2、二分查找要求:必须顺序存储、 必须按关键码大小有序排序
3、实现步骤:
对数组进行排序
找到序列的中间位置mid = (low+high)/2,low=0,high=array.length-1,比较array[mid]与待查找元素值x的大小
如果array[mid]==x,那么返回元素在数组中的位置,如果array[mid]<x,则low = mid+1, 否则high = mid-1
继续同样的操作,直到low>high,还没找到就返回-1
4、代码实现
12345678910111213141516//折半查找算法,需要先进行排序,循环方式public int binarySearch(int[] array, int x){ Arrays.sort(array); int low = 0, high = array.length-1; int mid = 0; while(low<=high){ mid = (low+high)/2; if(array[mid]==x) return mid; else if(array[mid]>x) high = mid-1; else low = mid+1; } return -1;}//递归方法,空间复杂度O(logn)public int binarySearch(int[] array, int x, int low, int high){ int mid = 0; if(low<=high){ mid = (low+high)/2; if(array[mid]==x) return mid; else if(array[mid]>x) return binarySearch(array,x,low,mid-1); else return binarySearch(array,x,mid+1,high); } return -1;}
5、时间复杂度:O(logn)
相关文章推荐
- 二分查找
- 二分查找原理及代码拓展
- 二分查找
- 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现
- 二分查找
- 百炼2774-木材加工-C语言-二分查找
- leetcode 35. Search Insert Position-二分查找|递归|非递归
- LeetCode-Two Sum-找和等于某个数的两个数-二分查找
- POJ 1064 Cable master(二分查找)
- 排序及二分查找
- 一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
- int *bsearch(int *t, int n, int x); 二分查找完全实现
- 二分查找
- Java基础算法:堆排,快排,二分查找
- 二分查找代码
- STL中的二分查找算法(binary_search lower_bound upper_bound equal_range)
- 二分查找
- 归并排序 二分查找
- 二分查找 -- 代码之美
- 重学java之随机数组二分查找