二分查找
来源:互联网 发布:python执行shell文件 编辑:程序博客网 时间:2024/06/06 07:07
网上有看到说大多数程序员都不能写出二分查找的算法,所以呢,我不能成为那大多数程序员中的一个,果然瞎琢磨了半天,还是写出来了,mark下吧。
二分查找的数组得是从小到大升序排序的,将数组的n个元素分成两部分,search与a[n/2]进行比较,search < a[n / 2]那就从数组的左半部分搜索,search > a[n / 2]就从数组的右半部分搜索。其时间复杂度无非是while循环执行的次数,搜索数组长度变化的过程是
n, n/2, n/4, ...n/2^k, k就是执行的次数,由于n/2^k取整>=1 (长度不能小于1吧,呵呵)令n/2^k=1可得k=log2n, 是以2为底, n的对数这样时间复杂度就可以表示成O(logn)
show you the code:
public class BinarySearch { public static void main(String[] args) { int[] a = {4, 5, 12, 13, 15, 17, 18, 23, 25, 27, 34, 34, 35, 38, 49, 49, 51, 53, 54, 56, 62, 64, 65, 76, 78, 97, 98, 99}; int search = 5; System.out.println(binarySearch(a, search)); } public static int binarySearch(int[] a, int search) { int left = 0; int right = a.length - 1; int mid = a.length / 2; if (search == a[mid]) { return mid; } while (left <= right) { mid = (right + left) / 2; if (search < a[mid]) { right = mid - 1; } else if (search > a[mid]) { left = mid + 1; } else if (search == a[mid]) { return mid; } } return -1; }}
阅读全文
1 0
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- 二分查找
- Octave教程五:控制语句if/while/for以及函数的定义和使用
- FAQ(4):javaee使用mybatis,org.apache.ibatis.io.Resources报错
- Bailian2719 陶陶摘苹果【序列处理】(POJ NOI0106-02, vijos P1102)
- 【PAT B1001】害死人不偿命的(3n+1猜想)
- JavaFX之RadioButton (2)
- 二分查找
- 【ML】VC dimension
- vc++中的import的使用
- spark算子运算
- 用docker搭建hadoop 总结
- docopt:为Python程序创造一个优雅的命令行界面
- Java并发编程:volatile关键字解析
- mysql错误解决方案
- Oracle Essentials, 5th Edition.pdf 英文原版 免费下载