博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BinarySearch 二分查找
阅读量:6320 次
发布时间:2019-06-22

本文共 943 字,大约阅读时间需要 3 分钟。

hot3.png

#include
#include
#include
#include
using namespace std;int rank1(int key, int *a,int length) { int lo = 0; int hi = length -1; int mid; while(lo <=hi) { mid= (lo+hi)/2; if(a[mid]==key) return mid; else if(a[mid]>key) hi=mid-1; else lo=mid+1; } return -1; }int main(){  srand((unsigned int) time(0));  int a[100]={0};  for(int i=0;i<100;i++)  {  a[i] = rand()%1000;  }  sort(a,a+100);  a[99]=1001;  int result =rank1(10, a, 100);  cout<
<

使用前提:待查找的数组必须是有序的,这里排序采用了STL的sort方法,主要是基于快速排序算法的,在之后的博客里我会陆续更新。

时间复杂度:O(lg n) 由于2的n次方为n

空间复杂度: 主要是数组本身的空间

基本思想:假设排序好的数组是升序。当我们想要查找对应key所在数组的位置时,每一次都与数组中间位置的值进行对比:        1. 如果数组中间值大于key那么,要找的值如果存在一定位于数组的前半部分,那么更新hi=mid-1;同时更新mid。

     2.如果数组中间值小于key那么,要找的值如果存在一定位于数组的后半部分,那么更新low=mid+1;同时更新mid。

     3.  如果mid对应的值等于key,那么返回mid就是要找的位置。

结束条件:1. 找到对应的位置 2.hi<low的时候

转载于:https://my.oschina.net/u/2558151/blog/547756

你可能感兴趣的文章
LeetCode.884-两句话中不常见的单词(Uncommon Words from Two Sentences)
查看>>
微信小程序demo——入门级(附源码)
查看>>
git创建分支并提交项目
查看>>
redhat yum 从 iso 安装
查看>>
git使用
查看>>
hibernate配置文件再写
查看>>
React Native笔记整理
查看>>
广义势能函数和带电粒子在电磁场中的运动
查看>>
zabbix tigger 设置
查看>>
python-生成器
查看>>
udp实现网络通信
查看>>
linux设置LD_LIBRARY_PATH变量
查看>>
windows 各种命令
查看>>
yii2 formatter 中 html 和 raw 的区别
查看>>
C语言实现读取文件所有内容到字符串
查看>>
安装关系型数据库MySQL和大数据处理框架Hadoop
查看>>
std140
查看>>
.Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败...
查看>>
github新建本地仓库并将代码提交到远程仓库
查看>>
javascript的对象、类和方法
查看>>