美文网首页
查找算法之二分查找算法

查找算法之二分查找算法

作者: 官先生Y | 来源:发表于2017-04-11 07:59 被阅读24次

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

代码实现:

public class BinarySearchByRecursion {
    public static void main(String[] args) {
        int[] sortedArr = { 1, 3, 5, 8, 10, 12 };
        System.out.println(binarySearch(sortedArr, 10));
        System.out.println(binarySearchByRecursion(sortedArr, 0, sortedArr.length - 1, 10));
        //JDK提供二分查找算法
        System.out.println(Arrays.binarySearch(sortedArr, 10));
  
    }

    /**
     * 非递归二分查找算法
     * 
     * @param srcArray
     *            有序数组
     * @param des
     *            待查找数据
     * @return 返回-1 未找到
     */
    public static int binarySearch(int[] srcArray, int des) {

        int low = 0;// 第一个位置
        int high = srcArray.length - 1;// 最高位置.数组长度-1,因为下标是从0开始的
        while (low <= high) {// 循环终止条件是low不大于high
            // int middle = low + ((high - low) >> 1);
            int middle = (low + high) >> 1;// 左移1位=除2
            if (des == srcArray[middle]) {// 与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标
                return middle;
            } else if (des < srcArray[middle]) {
                // 移动high
                high = middle - 1;
            } else if (des > srcArray[middle]) {
                // 移动
                low = middle + 1;
            }
        }
        return -1;
    }

    /**
     * 递归方式实现
     * 
     * @param srcArray
     * @param low
     * @param high
     * @param des
     * @return
     */
    public static int binarySearchByRecursion(int[] srcArray, int low, int high, int des) {

        if (low <= high) {
            int middle = (low + high) >> 1;
            if (des == srcArray[middle]) {// 与最中间的数字进行判断,是否相等,相等的话就返回对应的数组下标
                return middle;
            } else if (des < srcArray[middle]) {
                // 移动high
                return binarySearchByRecursion(srcArray, low, middle - 1, des);
            } else if (des > srcArray[middle]) {
                // 移动
                return binarySearchByRecursion(srcArray, middle + 1, high, des);
            }
        }
        return -1;
    }

}

相关文章

  • 算法

    一.算法基础--算法的特性 二.算法基础--算法的复杂度 三.顺序查找和二分查找 顺序查找 二分查找(前提是有序的...

  • 查找算法之二分查找算法

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其是要求待查表为有序表,且插入删除困难。因此,折半...

  • 数据结构与算法系列——二分查找

    二分查找算法的简单介绍 今天我们来学习一下二分查找算法,也叫做折半查找算法。使用二分查找算法的前提是数据需要是有序...

  • 二分查找算法

    一、二分查找算法 二分查找算法又称为折半查找算法,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序...

  • 15-二分查找(上):如何用最省内存的方式实现快速查找功能?

    一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一...

  • 数据结构和算法--二分查找

    二分查找 二分查找的思想 二分查找(Binary Search)算法,也叫折半查找算法。 二分查找针对的是一个有序...

  • 二分查找算法

    @(算法集) 二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,...

  • 可查找重复元素的二分查找算法

    可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找。假设...

  • 数据结构与算法笔记day12:二分查找(上)

    二分查找(Binary Search)算法,也叫折半查找算法,是一种针对有序数据集合的查找算法。 1无...

  • 消息传递-缓存-转发流程

    消息传递 缓存查找 哈希查找 三种查找方式缓存 -> 哈希算法查找当前类 -> 已排序 二分查找算法 未排序 ...

网友评论

      本文标题:查找算法之二分查找算法

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