zoukankan      html  css  js  c++  java
  • 常见的算法-二分查找

    介绍

      二分查找,又叫折半查找,要求待查找的序列有序。

      步骤:

    1. 先进行排序;
    2. 每次取中间位置的值,与待查值进行比较;
    3. 如果中间值大于待查值,则选择前半部分再次查找;
    4. 如果中间值小于待查值,则选择后半部分再次查找;
    5. 依次类推直到中间值与待查值相等即可,否则没有要查询的值。

    线性检索和二分检索

    线性检索和二分检索求 23 的位置

    从动态图看出,二分检索比线性检索快。

    但是如果查找1的话,反而线性检索比二分检索快,当然这种情况比较少。综合来看二分检索速度大于线性检索

    代码实现

    import java.util.Arrays;
     
    /**
     * 测试二分法查找
     * 二分法适用于已经排好序的数组
     * @author Administrator
     *
     */
    public class TestBinarySearch {
        public static void main(String[] args) {
            int[] arr= {30,20,50,10,80,9,7,12,100,40,8};
            Arrays.sort(arr);
            System.out.println(Arrays.toString(arr));
            System.out.println(myBinarySearch(arr,40));
            }
        
        public static int myBinarySearch(int[] arr,int value) {
            int low=0;
            int high=arr.length-1;
            while(low<=high) {
                int mid=(low+high)/2;
                if(value==arr[mid]) {
                    return mid;
                    }
                if(value>arr[mid]) {
                    low=mid+1;    
                }
                if(value<arr[mid]) {
                    high=mid-1;
                }
                
            }
            return -1;//没有找到返回-1
        }
        
    }
  • 相关阅读:
    cogs 896. 圈奶牛
    bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘
    bzoj 1007: [HNOI2008]水平可见直线
    bzoj 3673: 可持久化并查集 by zky
    bzoj 3545: [ONTAK2010]Peaks
    bzoj 1901: Zju2112 Dynamic Rankings
    动态 K th
    poj 2104 K-th Number
    bzoj 3657 斐波那契数列(fib.cpp/pas/c/in/out)
    青蛙的约会
  • 原文地址:https://www.cnblogs.com/FondWang/p/12570870.html
Copyright © 2011-2022 走看看