zoukankan      html  css  js  c++  java
  • 二分查找和线性查找(二)

    二分查找和线性查找可运用于数组

    线性查找  时间复杂度 O(n)

      1、遍历数组

      2、拿目标和数组中的元素进行匹对

      3、找到则返回数组中该元素的下标

      4、未查询到则返回-1

    
    

    //自定义数组
    public class MyArray {

    
    

    int[] elements;


    //
    线性查找 public int search(int target) { for (int i = 0; i < elements.length; i++) { if (target == elements[i]) { return i; } } // 如果没找到 return -1; }
    }

    二分查找 时间复杂度 O(log2n)

      二分查找是有必要的前提,即数组中的元素一定要排好顺序

       1、找到该数组的中点

       

    2、目标元素与中点值进行比对

      相等则返回该中点元素下标

       如果目标元素大于中点

     则把低位元素的下标设置成中点向右移动一位

     如果目标元素小于中点

    则把高位元素的下标设置成中点向左移动一位

    根据低位元素下标和高位元素下标重新计算出中点

    public class MyArray {
    
        int[] elements;
        // 二分查找
    
        public int binarySearch(int target) {
            int low = 0;
            int high = elements.length - 1;
            int mid = (low + high) / 2;
            while (true) {
                if (low > high) {
                    break;
                }
                if (target == elements[mid]) {
                    // 相等 返回位置
                    return mid;
                } else {
                    // 如果target > mid
                    if (target > elements[mid]) {
                        low = mid + 1;
                    } else {
                        // target <elements[mid]
                        high = mid - 1;
                    }
    
                }
                mid = (low + high) / 2;
            }
            return -1;
        }
    }

     

  • 相关阅读:
    SQLServer两张表筛选相同数据和不同数据
    Js工具
    检测本地字节序 是大端存储还是小端存储
    C++ 一个统计文件夹下所有代码文件行数的小工具
    C++ 扫描文件夹下所有文件
    C++ 安全拼接字符串函数
    几个常见Win32 API函数
    C 数组模拟阶乘运算
    leetcode 2. Add Two Numbers
    Airline Hub
  • 原文地址:https://www.cnblogs.com/laolei11/p/10642261.html
Copyright © 2011-2022 走看看