zoukankan      html  css  js  c++  java
  • JavaSE语言基础之数组二分法查找

    一.概念:

    算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的。
    基本思想:假设数据是按升序排序的,对于给定值key,从序列的中间位置k开始比较,
    如果当前位置arr[k]值等于key,则查找成功;
    若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
    若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high],
    直到找到为止,时间复杂度:O(log(n))。(摘自百度百科)

    二.代码

        int[] arr ={3,12,24,36,55,68,75,88};
    int low = 0;
    int high = arr.length - 1;
    int mid = -1; while(low <= high) { mid = (low + high) / 2; if (arr[mid] < value){
    low = mid + 1;
    }
    else if (arr[mid] > value){

    high = mid - 1;
    }
    else{

    break;
    } }
    if (low <= high) {

    System.out.println("可以找到:index = " + mid + "。"); } else {
    System.out.println("无法找到!");
    }

    执行流程:

    1)开始令low=0(指向3),high=7(指向88),则mid=3(指向36)。因为k<mid,故应在前半段中查找。

    2)令新的high=mid-1=2(指向24),而low=0(指向3)不变,则新的mid=1(指向12)。此时k>mid,故确定应在后半段中查找。

    3)令新的low=mid+1=2(指向24),而high=2(指向24)不变,则新的mid=2,此时k=arr[mid],查找成功。

    如果要查找的数不是数列中的数,例如k=25,当第四次判断时,k>mid[2],在后边半段查找,令low=mid+1,即low=3(指向36),high=2(指向24)出现low>high的情况,表示查找不成功。

     

  • 相关阅读:
    Cocos-js(html5) 学习
    Cocos-html5 初识
    quick cocos2d-x Xcode下省去clean,让修改的脚本生效
    iOS 淘宝买 开发者证书 进行真机调试
    iOS NSString的学习熟悉
    quick-cocos2d-x 加载进度条的学习
    HTML 学习之HTML语言嵌入JavaScript
    CCArray的使用(Quick-cocos2d-x)
    quick-cocos2d-x 精灵使用、动作等等的学习
    Spring(二) Mini版Spring的实现
  • 原文地址:https://www.cnblogs.com/luke-liuqi/p/9308766.html
Copyright © 2011-2022 走看看