zoukankan      html  css  js  c++  java
  • 数组元素的查找——二分法查找

     1 /*
     2  * 二分法查找算法是基于排序的基础之上(类库中好像有)
     3  * 利用二分法对数组元素进程查找111(下标为0), 222, 333, 444, 555, 666, 777, 888
     4  * 查找原理
     5  *     找666这个元素的下标,此元素下标是5.
     6  *     数组元素的下标为0——7
     7  *     通过二分法查找(0+7)/2-->中间元素下标:3
     8  *     拿着这个元素和目标元素对比:
     9  *         中间元素是:arr[3]-->444
    10  *         444 < 666
    11  *         被查找的元素666在目前中间元素444的右边。
    12  *         所以开始元素的下标从0变成3 + 1 = 4
    13  *     再重新计算一个中间元素的下标:
    14  *         开始下标是:4 + 1 = 5
    15  *         结束下标是:7
    16  *         (5 + 7)/ 2 --> 6
    17  *         中间元素是:arr[6]-->777
    18  *         777 > 666
    19  */
    20 public class ErFen {
    21     public static void main(String[] args) {
    22         int[] arr = { 111, 222, 333, 444, 555, 666, 777, 888 };
    23         int index = erFen(arr, 666);
    24         System.out.println(index == -1 ? "这个数不存在!" : "这个数的下标为:" + index);
    25     }
    26 
    27     private static int erFen(int[] arr, int i) {
    28         // 开始元素下标
    29         int begen = 0;
    30         // 结尾元素下标
    31         int end = arr.length - 1;
    32         while (begen <= end) {
    33             int mid = (begen + end) / 2;// 中间元素下标
    34             if (arr[mid] == i) {
    35                 return mid;
    36             } else if (arr[mid] < i) {
    37                 begen = mid + 1;
    38             } else {
    39                 end = mid - 1;
    40             }
    41         }
    42         return -1;
    43     }
    44 
    45 }
  • 相关阅读:
    Serverless 动态博客开发趟“坑”记
    tsv与csv文件
    zypper
    source、sh、./三种执行方式对脚本变量的影响
    linux nm
    ldconfig
    cpio
    License简介
    rpm之spec文件
    使用rpmbuild制作rpm包
  • 原文地址:https://www.cnblogs.com/HeSC980513/p/12951666.html
Copyright © 2011-2022 走看看