二分查找的原理及代码实现
2017-07-11 20:00
316 查看
二分查找算法的原理就是基于一个有序表进行查找;首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
优点:
时间复杂度虽然低,为O(log n)
查找次数少,查找速度快
缺点:
只能是基于有序结构去查询
具体代码(java)实现如下:
优点:
时间复杂度虽然低,为O(log n)
查找次数少,查找速度快
缺点:
只能是基于有序结构去查询
具体代码(java)实现如下:
public class TestDemo1 { /******************非递归的二分查找**************************/ public static boolean TPFind(int arr[], int length, int num){ assert(null != arr); boolean res = false; int start = 0, end = length -1; while(start <= end){ int midd = (start + end) >> 1; if(num == arr[midd]){ res = true; break; }else if(num < arr[midd]){ end = midd -1; }else if(num > arr[midd]){ start = midd + 1; } } return res; } /******************递归二分查找***************************/ public static boolean TPFind1(int arr[], int start, int end, int num){ assert(null != arr); boolean res = false; if(start <= end){ int midd = (start + end) >> 1; if(num == arr[midd]){ res = true; }else if(arr[midd] > num){ return TPFind1(arr,start,midd-1,num); }else{ return TPFind1(arr,midd+1,end,num); } } return res; } public static void main(String[] argv){ int arr[] = {12,23,34,45,56,67,78,89}; boolean p = TPFind1(arr, 0, arr.length - 1, 78); System.out.println(p); } }
相关文章推荐
- 二分查找算法原理及其java循环实现
- 【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
- 【整理】二分查找及代码实现
- 选择排序,冒泡排序及二分查找的代码实现
- C语言使用stdlib.h库函数的二分查找和快速排序的实现代码
- 二分查找原理及代码拓展
- 二分查找原理和实现
- JavaScript实现二分查找实例代码
- 一个递归和非递归实现二分查找的代码
- C语言二分查找算法及实现代码
- 《算法导论》第二章----插入排序(伪代码实现、课后习题(递归版本、二分查找策略版本))
- 二分查找原理和实现
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现,附代码)
- c语言:代码实现折半(二分)查找
- 二分查找java代码实现
- 冒泡排序和选择排序二分查找代码实现
- 算法 -- Java实现二分(折半)查找(图解 + 代码实现)
- 二分查找的几个变种(Java代码实现)
- C 二分查找 递归与非递归的实现代码
- [整理]二分查找搜索算法原理及递归,迭代方法实现