ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二分查找

2022-09-04 18:02:18  阅读:155  来源: 互联网

标签:二分 int 复杂度 value 查找 param 给定


一、时间复杂度

假设数据量是n、则每次查找的数据量分别是n、n/2、n/4、n/8、……n/2^k 。

k就是在找到数据的时候总共缩小的次数、而每次缩小的操作都只涉及两个数的操作、时间时间复杂度就是 n/2^k=1、即只剩一个数据的时候。k=log2n、所以时间复杂度就是O(logN)。

二、使用条件

1、依赖顺序结构-数组

2、给定的数组需要有序

3、数据量过大或者过小都不适合二分查找。

->需要全部将数据加载到连续的内存当中、比如100M的数据、或者1G的数据、都需要对应的连续内存。

三、案例

1、查找指定数组中给定值的第一个值的下标

 1 /**
 2      * 二分查找
 3      * 查找数组中 第一个值为value 的下标 不存在返回-1
 4      * @param arr
 5      * @param len
 6      * @param value
 7      * @return
 8      */
 9     public static int binarySearch(int [] arr, int len,int value){
10         int low =0;
11         int high=len-1;
12         while(low<=high){
13             int mid=low+((high-low)>>1);
14             int temp=arr[mid];
15             if(temp>value){
16                high=mid-1;
17             }else if(temp<value){
18                 low =mid+1;
19             }else{
20                 if(mid==0 || arr[mid-1]!=value){//索引为第一个 则肯定是
21                     return mid;
22                 }else{//如果找到的索引的前一个仍然是的话、则需要调整最高索引的值
23                     high=mid-1;
24                 }
25             }
26 
27         }
28         return -1;
29     }

2、其他变种案例

a、查找最后一个等于给定值

b、查找第一个大于等于给定值

c、查找最后一个小于等于给定值

 

 

 

标签:二分,int,复杂度,value,查找,param,给定
来源: https://www.cnblogs.com/richicewoo/p/16655585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有