zoukankan      html  css  js  c++  java
  • Java基础知识强化60:经典查找之二分查找

    1. 二分查找

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

    比较 基本查找 与 二分查找 ?

    (1)基本查找:数组元素无序(从头找到尾)

    (2)二分查找(折半查找):数组元素有序

    2. 二分查找原理

    (1)思想:每次都猜中间那个元素,比较大或者小,就能减少一半的元素。

    (2)原理图:

    3. 二分查找的代码实现:

     1 package cn.itcast_04;
     2 
     3 /*
     4  * 查找:
     5  *         基本查找:数组元素无序(从头找到尾)
     6  *         二分查找(折半查找):数组元素有序
     7  * 
     8  * 分析:
     9  *         A:定义最大索引,最小索引
    10  *         B:计算出中间索引
    11  *         C:拿中间索引的值和要查找的值进行比较
    12  *             相等:就返回当前的中间索引
    13  *             不相等:
    14  *                 大    左边找
    15  *                 小    右边找
    16  *         D:重新计算出中间索引
    17  *             大    左边找
    18  *                 max = mid - 1;
    19  *             小    右边找
    20  *                 min = mid + 1;
    21  *         E:回到B
    22  */
    23 public class ArrayDemo {
    24     public static void main(String[] args) {
    25         //定义一个数组
    26         int[] arr = {11,22,33,44,55,66,77};
    27         
    28         //写功能实现
    29         int index = getIndex(arr, 33);
    30         System.out.println("index:"+index);
    31         
    32         //假如这个元素不存在后有什么现象呢?
    33         index = getIndex(arr, 333);
    34         System.out.println("index:"+index);
    35     }
    36     
    37     /*
    38      * 两个明确:
    39      * 返回值类型:int
    40      * 参数列表:int[] arr,int value
    41      */
    42     public static int getIndex(int[] arr,int value){
    43         //定义最大索引,最小索引
    44         int max = arr.length -1;
    45         int min = 0;
    46         
    47         //计算出中间索引
    48         int mid = (max +min)/2;
    49         
    50         //拿中间索引的值和要查找的值进行比较
    51         while(arr[mid] != value){
    52             if(arr[mid]>value){
    53                 max = mid - 1;
    54             }else if(arr[mid]<value){
    55                 min = mid + 1;
    56             }
    57             
    58             //加入判断
    59             if(min > max){
    60                 return -1;
    61             }
    62             
    63             mid = (max +min)/2;
    64         }
    65         
    66         return mid;
    67     }
    68 }

     运行效果,如下:

  • 相关阅读:
    .NET 用 Unity 依赖注入——概述注册和解析类型(1)
    .NET 服务器定位模式(Service Locator Pattern)——Common Service Locator
    用什么样的语言就有什么样的公司【转载】
    编程语言和工具比较【翻译】
    .NET 基于任务的异步模式(Task-based Asynchronous Pattern,TAP) async await
    RocketMQ【未完成】
    Dapper
    Java 控制反转和依赖注入模式【翻译】【整理】
    Java 面向切面编程(Aspect Oriented Programming,AOP)
    Groovy 与 Python 的差异【翻译】
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4835523.html
Copyright © 2011-2022 走看看