数据结构与算法之二分查找
2016-04-01 12:06
513 查看
概念
二分查找又称折半查找,它是一种效率较高的查找方法。它的时间复杂度为O(logn)
二分查找要求:有序的线性表
基本思想
二分查找的基本思想是划分当前查找区间,区间的范围一步一步的缩小,如果找到直接返回,反之直到区间只有一个元素时停止
实现
设R为一个值递增的有序线性表
实现步骤:
首先确定该区间的中点位置:mid=[(low+high)/2]
然后将key值与R[mid]的值比较:若相等,则直接返回当前mid,否则进行确定新的区间操作,这分为两种情况
①R[mid]>key则表明key在区间的左边,所以low不变,high=mid-1
②R[mid]<key则表明key在区间的右边,所以high不变,low=mid+1
如果没有找到则返回-1
代码实现:
二分查找又称折半查找,它是一种效率较高的查找方法。它的时间复杂度为O(logn)
二分查找要求:有序的线性表
基本思想
二分查找的基本思想是划分当前查找区间,区间的范围一步一步的缩小,如果找到直接返回,反之直到区间只有一个元素时停止
实现
设R为一个值递增的有序线性表
实现步骤:
首先确定该区间的中点位置:mid=[(low+high)/2]
然后将key值与R[mid]的值比较:若相等,则直接返回当前mid,否则进行确定新的区间操作,这分为两种情况
①R[mid]>key则表明key在区间的左边,所以low不变,high=mid-1
②R[mid]<key则表明key在区间的右边,所以high不变,low=mid+1
如果没有找到则返回-1
代码实现:
public int BinSearch(int[] array, int key) { int low = 0, high = array.Length - 1, mid; while (low <= high) { mid = (low + high) / 2; int curValue = array[mid]; if (curValue == key) return mid; if (curValue > key) { high = mid - 1; } else { low = mid + 1; } } return -1; }
相关文章推荐
- hdu 4252(单调栈)
- 从B树、B+树、B*树谈到R 树
- 数据结构 顺序串的各种基本运算
- 10个队中非空队列按队列号从小到大的顺序串接成一条链
- 【数据结构与算法】十五
- 《大话数据结构》第9章 排序 9.10 总结回顾
- 数据结构之队列
- ldif的数据结构及一个DEMO
- 整数序列环形队列
- 数据结构与算法分析视频教程全集
- 平衡树之AVL树旋转
- ZOJ 3228 AC自动机
- Redis不同数据类型的的数据结构实现
- “顺序栈”判断表达式中的括号是否正确配对
- “链栈”判断表达式中的括号是否正确配对
- 《学习javascript数据结构与算法》——第七章:字典和散列表
- 数据结构之算法2.6-在顺序线性表L中查找第1个值与e满足compare()的元素的位序
- Java数据结构——迭代器
- 数据结构与算法之快速排序
- 数据结构: 链表基础