二分查找法
来源:互联网 发布:windows 3.51 编辑:程序博客网 时间:2024/04/28 13:18
我们知道,如果我们在一个数组中查找 一个指定数据位置的话,大部分人的想法是,这不很简单么,for循环数组,然后找出来就好了 好比这样,
public static int binarySearch(int key, int i[]) { for (int q = 0; q < i.length; q++) { if (i[q] == key) return q; } return -1; } public static void main(String args[]) { int[] a = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; System.out.println(FindData.binarySearch(4,a)); }
这样写确实没问题,但是如果数据量是 100w 甚至1000w或者更高的时候,那么它的效率就不是很好了,这时我们就应该用二分查找来解决。
注意二分查找法只能查找有序数组
public class BinarySearch { public static int binarySearch(int key, int[] source) { int left = 0; //最左边 int right = source.length - 1;//最右边 while (left <= right) { //left会越来越大, right会越来越小 int mid = left + (right - left) / 2; if (source[mid] < key) left = mid + 1; else if (source[mid] > key) right = mid - 1; else return mid; } return -1; } public static void main(String argsp[]) { int[] source = new int[]{1, 2, 3, 4, 5, 6, 7}; System.out.println(BinarySearch.binarySearch(7, source)); }}
二分查找法的思路是,在一个有序的数组内,先记录起始点 和终止点 查找出数组中间索引点,然后把数组内中间点的值取出来和传入要查找的值进行比对, 如果要查找的值比中间点大的话,那么把起始点移动到 中间点+1,在右边的数组块内查找,反之相同。
这样做的话 每次只查找源数组内的一半数组,效率得到提升。
阅读全文
0 0
- 查找----二分查找法
- 二分查找法,查找string
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- 二分查找法
- java:二分查找法
- C++ 二分查找法
- 二分查找法
- 【二分查找法】
- php二分查找法
- 二分查找法
- 二分查找法
- Java通过反射获取和设置对象的属性值
- iOS开发之将base64位编码的字符串转换为图片,data转图片,图片转data
- Spark map与flatmap区别
- 遍历FTP服务器上的文件
- C++使用 matio读写 .mat文件
- 二分查找法
- @Controller和@RestController的区别?
- C# 压缩打包文件下载
- 小结
- 如何实现Windows系统的文件与虚拟机Ubuntu共享
- android 高级之旅 (六)ExpandableListView 使用详解
- redis漏洞利用
- GCC与GDB工具和makefile基础
- failed to find target with hash string 'android-XX'