二分法查找
来源:互联网 发布:中信证券待遇 知乎 编辑:程序博客网 时间:2024/06/04 19:23
二分法查找 ,只能针对于有序数据进行查找,无序数据无法使用二分法查找。
有序数组:{1,2,3,4,4,5,6,7,7,8} 这个可以使用二分法查找
无序数组:{33,3,45,6,575,76,67,676} 这个无法使用二分法查找
二分法查找规则:
如,查询数组{1,3,4,5,6,7,8,8,43,54,55,77,88,99}中的77所在下标,查找方法为
1、获取下标最小值 0
2、获取下标最大值 array.length-1
3、获取中间的下标,也就是(最小值 +最大值 )/2
4、拿中间下标的值 对比 77,发现中间值 < 77,那么,更改最小值 = 中间值+1,最大值 不变
5、获取中间下标(最小值 +最大值 )/2
6、再次拿数组的中间下标值 对比77,按上叙方法进行对比,依次类推,直到对比完为止
代码如下:
public static void main(String[] args){int[] array = {1,3,4,5,6,7,8,8,43,54,55,77,88,99};int index = findIndex(array,99);System.out.println("查找到值的下标为:"+index);}public static int findIndex(int[] array,int num){//最小值 int min = 0;//最大值 int max = array.length-1;//中间下标值 int midd = (max+min)/2;//用以结束循环,防止死循环int end = max;//如果查找的数组不等于数组的中间值,则进行循环while(num != array[midd]){//如果数组的中间值大于查找值,则将最大值= 中间下标值-1if(array[midd] > num){max = midd-1;}else{//如果数组的中间值小于查找值,则将最小值= 中间下标值+1min = midd+1;}//重新获取中间值midd = (max + min)/2;//获取结束值 ,因为二分法是取中间值进行对比,相当于除于2,所以结束值也相应除以2end = end /2;//如果结束值 等 于0了,说明要查找的值不存在于数组中,没有必须再次循环了,否则,会进入死循环if(end == 0){return -1;}}//返回查找到值的下标return midd;}
结果:
查找到值的下标为:13
0 0
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- 二分法查找
- oc——类——__strong __weak __unsafe_unretained
- closehandle()函数
- 把数组排成最小的数
- C++纯虚函数
- 2017华为软件精英挑战赛官方case最优解
- 二分法查找
- SpringJDBC之RowMapper通用类
- 设计模式(2)————简单工厂模式
- 仿qq气泡通知粘连效果
- Python pandas数据分析中常用方法
- 微信公众号
- CSS中强大的EM
- Codeforces Round #403 div2 (CodeForces
- HDU1285 确定比赛名次(拓扑排序+队列优化+链式前向星)