【算法学习笔记】22.算法设计初步 二分查找 上下界判断
来源:互联网 发布:淘宝怎么用照片搜同款 编辑:程序博客网 时间:2024/06/05 00:20
二分查找的两种写法,递归和普通循环~ 大部分情况下都用普通的循环,因为递归法费空间。
/* 时间复杂度: 1.最坏情况 查找最后一个元素(或者第一个元素) Master定理 T(n)=T(n/2)+O(1) 这个O(1)是判断 所以 T(n)=O(logn) a=1 b=2 所以要比较的是 O(1)和 n^(log2 1) 2.最好情况 查找中间元素 O(1) 空间复杂度: S(n)=n */int biFind(int* A,int len,int item,int cur){ //example: len 4: 2 4 5 3 middle = 1 (1.5) //example: len 5: 2 5 6 4 1 middle = 2 int middle = (len-1)/2; if (A[middle]==item) return cur; if (len==1) return -1; if(A[middle]>item) return biFind(A, middle, item,cur); return biFind(A+middle+1, len-middle-1, item,cur+middle+1);}int biFind_1(int* A,int x,int y,int item){ //划分 int m = x+(y-x)/2; while (x<y) {//说明还有要搜索的必要 if(A[m]==item) return m;//找到了 返回 else if(item<A[m]) y=m;//item在左边 所以右端更新为m else x=m+1;//item在右边 所以左边更新为m+1 m = x+(y-x)/2;//更新middle } return -1;//说明没有找到}
//lower_bound的定义 = 若A中有item 则返回A中item第一次出现的位置//若没有item 则返回i:这个i可以是的 把A[i],A[i+1]...后遗 把item插入到A[i]可以保证A有序int lower_bound(int* A,int x,int y,int item){ //划分 int m ; while (x<y) {//说明还有要搜索的必要 m = x+(y-x)/2;//更新middle if(A[m]>=item) y=m;//找到了但是左面有可能还有 或者 中间元素大于item else x=m+1;//item在右边 所以左边更新为m+1 } //如果一直没找到 此时x==y 且是正中间 return x;}
0 0
- 【算法学习笔记】22.算法设计初步 二分查找 上下界判断
- 二分查找求上下界的两种不同算法
- 【算法学习笔记】-二分查找算法
- 二分查找算法笔记。
- Java二分查找算法学习笔记。
- |算法讨论|二分查找 学习笔记
- 二分查找求上、下界
- 二分查找求上、下界
- 二分查找求上下界
- 算法学习-二分查找
- 折半查找算法学习初步
- 二分查找下界 下界
- 算法学习之二分查找
- 二分查找算法学习札记
- 算法学习之二分查找
- 排序算法学习-二分查找
- 二分查找 上下界 插入位置
- 《数据结构与算法》学习笔记19 递归_二分查找
- Light OJ 1341 Aladdin and the Flying Carpet(唯一分解定理)
- 葫芦娃关于快速幂流程的详细讲解
- 二进制取反
- sdt:bind用法
- vcs和verdi的联合仿真
- 【算法学习笔记】22.算法设计初步 二分查找 上下界判断
- Android SetBackGroundColor not working
- Tomcat数据源例子
- NEC开发环境的使用方法
- leetcode-171 Excel Sheet Column Number
- java中list数据拆分为sublist实现分页的简单代码
- Python生态环境简介
- 安慰奶牛 问题描述 Farmer John变得非常懒,他不想再继续维
- Java 获取mac 地址