美文网首页
二分查找

二分查找

作者: lemonTreeTop | 来源:发表于2017-07-13 18:40 被阅读50次

    二分查找的概念

    在计算机科学,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法,搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半

    应用二分查找的条件

    数据应该

    • 存储在数组中
    • 有序排列

    问题1:为什么要存储在数组中?
    问题2:为什么要有序排列?

    二分查找的算法的实现

    import java.util.Arrays;
    
    public class BinarySearch {
        public static void main(String[] args) {
            int a[]={1,7,3,8,9,12,6,15,17};
            Arrays.sort(a);
            for (int b : a) {
                System.out.print(b+" ");
            }
            System.out.println();
            System.out.println(search(15,a));
        }
        public static int search(int key,int[] a){
            int lo = 0;
            int hi = a.length - 1;
            while (lo <= hi) {
                // Key is in a[lo..hi] or not present.
                int mid = lo + (hi - lo) / 2;
                if(key < a[mid]){
                    hi = mid - 1;
                }
                else if (key > a[mid]) {
                    lo = mid + 1;
                }
                else return mid;
            }
            return -1;
        }
    }
    

    问题1:可以在链表上实现,但是链表的随机访问效率很低,所以需要数组。
    问题2:有序可以使每次比较后范围缩小一半,查找速度快

    二分查找过程描述

    查找的数为15,把数组排序后:
    1 3 6 7 8 9 12 15 17

    第1次:lo=0,hi=8,mid=4,a[mid]=8
    第2次:lo=5,hi=8,mid=4,a[mid]=12
    第3次:返回mid

    3次可以把数找出来

    相关文章

      网友评论

          本文标题:二分查找

          本文链接:https://www.haomeiwen.com/subject/vnzwhxtx.html