【数据结构与算法】二分查找
2016-12-30 08:36
274 查看
二分查找 是logn的查找算法(前提已排序)
package main;
/**
*
*二分查找在事先排序的前提下的时间复杂度为logn,低于顺序查找
*/
public class Algorithm {
//递归实现,思路比较清晰,如果l == h,说明查到底了,如果还不等说明没有,否则,就递归找左和右,检查左和右的结果。
public static int binarySearch(int[] array ,int k){
return search(array, 0, array.length - 1, k);
}
private static int search(int[] array ,int low, int high, int k){
if (low == high) {
if (array[low] == k) {
return low;
}else {
return -1;
}
}else {
int middle = (low + high) / 2;
int l = search(array, low, middle, k);
int r = search(array, middle + 1, high, k);
if (l != -1) {
return l;
}else if (r != -1) {
return r;
}else {
return -1;
}
}
}
//非递归实现,当l<h时,说明没有找到,返回-1,否则就进入循环体,看中间,决定找左还是右。
public static int binarySearch1(int[] array ,int k){
int low = 0, high = array.length - 1;
while(low <= high){
int m = (low + high) / 2;
if(array[m] == k){
return m;
}else if (array[m] > k) {
high = m - 1;
}else {
low = m + 1;
}
}
return -1;
}
}
package main;
/**
*
*二分查找在事先排序的前提下的时间复杂度为logn,低于顺序查找
*/
public class Algorithm {
//递归实现,思路比较清晰,如果l == h,说明查到底了,如果还不等说明没有,否则,就递归找左和右,检查左和右的结果。
public static int binarySearch(int[] array ,int k){
return search(array, 0, array.length - 1, k);
}
private static int search(int[] array ,int low, int high, int k){
if (low == high) {
if (array[low] == k) {
return low;
}else {
return -1;
}
}else {
int middle = (low + high) / 2;
int l = search(array, low, middle, k);
int r = search(array, middle + 1, high, k);
if (l != -1) {
return l;
}else if (r != -1) {
return r;
}else {
return -1;
}
}
}
//非递归实现,当l<h时,说明没有找到,返回-1,否则就进入循环体,看中间,决定找左还是右。
public static int binarySearch1(int[] array ,int k){
int low = 0, high = array.length - 1;
while(low <= high){
int m = (low + high) / 2;
if(array[m] == k){
return m;
}else if (array[m] > k) {
high = m - 1;
}else {
low = m + 1;
}
}
return -1;
}
}
相关文章推荐
- java数据结构与算法-递归二分查找
- [数据结构与算法] : 二分查找
- 【数据结构与算法之查找算法二】二分查找
- 数据结构和算法设计专题之---二分查找(Java版)
- 数据结构与算法------二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法学习之路:二分查找的非递归和递归算法
- 【数据结构与算法】二分查找递归非递归实现
- 数据结构与算法-折半查找(二分查找)
- 数据结构与算法--查找之顺序查找和二分查找
- 【数据结构与算法】【查找】折半查找(二分查找)的代码实现
- 【数据结构与算法】二分查找
- Java数据结构与算法之【二分查找】
- 数据结构与算法题目集(中文)4-10 二分查找 (20分)
- C 数据结构与算法 二分查找
- 数据结构与算法-二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法-二分查找
- 数据结构——算法之(005)(输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 算法学习-数据结构之链表操作,创建,插入,删除,查找。