zoukankan      html  css  js  c++  java
  • 二分搜索基础算法

      分治算法基本思想:将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题相互独立且与原问题相同;

      给定已排好序的 n 个元素 array[0:n-1],现要在这 n  个元素找出特定元素x;

      首先较容易想到的是用顺序搜索方法,逐个比较 array[0:n-1] 中元素,直至找出元素 x 或搜索整个数组后确定 num 不在其中。这个方法没有很好的利用 n 个元素排好序这个有利条件,因此在最坏的情况下,顺序搜索方法需要 O(n) 次比较  

      二分搜索算法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logn) 时间完成搜索任务;

      二分搜索算法的基本思想是将 n 个元素分成个数大致相同的两半,取 array[n/2] 与 num 作比较。如果 num = array[n/2],则找到 num,算法终止;如果 num < array[n/2],则只在数组 a 的左半继续搜索 num;如果 num > array[n/2],则只在数组 a 的右半继续搜索 num。具体算法如下:

      

    public class BinarySearch {
    
        /**
         * 初始化数组元素
         */
        private static final Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
        /**
         * 二分查找
         */
        public static Integer binarySearch(Integer num) {
            if (array.length == 0 || num == null) {
                throw new RuntimeException("数组元素为空 或 查找的元素为NULL");
            }
            Integer left = 0;
            Integer right = array.length - 1;
            while (left <= right) {
                Integer mid = (left + right) / 2;
                if (num == array[mid]) {
                    return mid;
                }
                if (array[mid] > num) {
                    right = mid - 1;
                }
                if (array[mid] < num) {
                    left = mid + 1;
                }
            }
            return -1;
        }
    
        public static void main(String[] args) {
            Scanner input =  new Scanner(System.in);
            System.out.print("请输入查找的元素值:");
            Integer num = input.nextInt();
            Integer index = binarySearch(num);
            System.out.println("【-1为未查找到】查找的元素下标为:" + index);
        }
    
    }

    每天进步一点,继续前行......

      

  • 相关阅读:
    C++ string 类的 find 方法实例详解
    linux系统中errno与error对照表
    tshark (wireshark)笔记
    自己签发免费ssl证书
    Go语言练习:网络编程实例——简易图片上传网站
    java开源工具包-Jodd框架
    数据库性能瓶颈解决方案
    [转载]如何快速学习一门技术
    [转载]IBM公司发布了最新的power7服务器p750 p770 p780
    计算机组成原理 — 指令系统
  • 原文地址:https://www.cnblogs.com/blogtech/p/12287221.html
Copyright © 2011-2022 走看看