美文网首页
二分搜索

二分搜索

作者: 张_何 | 来源:发表于2021-10-09 10:55 被阅读0次
  • 如何确定一个元素在数组中的位置?
  • 如果是无序数组,从第 0 个位置开启式遍历搜索,平均时间复杂度O(n)
  • 如果是有序数组,可以使用二分搜索,最坏时间复杂度为O(logn)

思路

  • 假设在[begin,end) 范围内搜索某个元素 v, mid = (begin + end) / 2 , 这里 end 取的是数组长度
  • 如果 v < m, 去[begin, mid)范围内二分搜索
  • 如果 v > m, 去[mid+1, end)范围内二分搜索
  • 如果 v = m, 直接返回 mid


    image.png

实现

  • 查找某个元素在有序数组中的位置,如果没有返回-1
int indexOf(List<int> array, int v) {
  if (array == null || array.length == 0) return -1;
  int begin = 0, end = array.length;
  while(begin < end) {
    int mid = (begin + end) >> 1;
    if (v < array[mid]) {
      end = mid;
    } else if (v > array[mid]) {
      begin = mid + 1;
    } else {
      return mid;
    }
  }
  return -1;
}
  • 查找某个元素在有序数组中待插入的位置
int search(List<int> array, int v) {
  if (array == null || array.length == 0) return 0;
  int begin = 0, end = array.length;
  while(begin < end) {
    int mid = (begin + end) >> 1;
    if (v < array[mid]) {
      end = mid;
    } else {
      begin = mid + 1;
    }
  }
  return begin;
}

问题

  • 如果存在多个相同的值,返回的索引是哪一个? 返回的是不确定的

相关文章

  • Algorithm进阶计划 -- 二分搜索

    二分搜索二分搜索模板二分搜索运用 1. 二分搜索模板 二分搜索(二分查找)也称折半查找(Binary Search...

  • 算法-二分搜索算法

    算法:二分搜索算法(折半查找算法)时间复杂度: 二分搜索算法概述 二分搜索算法伪代码 二分搜索算法实现 二分搜索算...

  • 搜索算法

    顺序搜索 二分搜索

  • 二分搜索(Binary_Search)

    1. 二分搜索是什么? 二分搜索(英语:binary search),也叫折半搜索(英语:half-interva...

  • AVL 树

    一:什么是 AVL 树? 在我的上一篇文章《二分搜索树与二分查找法》中,详细介绍了二分搜索树这种数据结构。二分搜索...

  • 二分算法-LeetCode 69

    二分算法-LeetCode 69 二分算法 二分算法模板, 二分搜索即搜索一个数,如果存在,返回其索引,否则返回-...

  • Pearls9. 代码调优

    [TOC] 问题:在包含1000个整数的表中进行二分搜索: 二分搜索的调优 说明:在二分搜索中通常不需要代码调优 ...

  • Pearls4 编写正确的程序

    4.1 二分搜索

  • 手敲数据结构——使用二分搜索树实现Set

    关于实现二分搜索树,可以看前面的文章 手敲数据结构——二分搜索树

  • 分治算法(二分搜索)

    每日一言 : 当我们真正热爱这世界时,我们才真正生活在这世上。——泰戈尔 二分搜索 什么是二分搜索 二分搜索又叫二...

网友评论

      本文标题:二分搜索

      本文链接:https://www.haomeiwen.com/subject/vblxoltx.html