《数据结构与算法图解》Chapter-2

书名:数据结构与算法图解
作者:[美]杰伊.温格罗 (Jay Wengrow)
出版社:人民邮电出版社
出版时间:2019-04-01
ISBN: 9787115509000

知识点:

  1. 算法是指某项操作的过程
  2. 有序数组线性查找(代码1)
  3. 有序数组二分查找(代码2)
  4. 有序数组的线性查找O(n),二分查找O(log n,想象3个数,二分法最多仅需找2次,比如想找的是最小值,二分法先找中间值,然后确定是最小值),时间复杂度如图1所示

代码1:

def linear_search(array, value)
  # 遍历数组的每一个元素
  array.each do |element|
    # 如果这个元素等于我们要找的值,则将其返回
    if element == value
      return value
    # 如果这个值大于我们要找的值,则提早退出循环
    elsif element > value
      break
    end
  end
  # 如果没找到,则返回空值
  return nil
end

代码2:

def binary_search(array, value)
  # 首先,设定下界和上界,以限定所查之值可能出现的区域。
  # 在开始时,以数组的第一个元素为下界,以最后一个元素为上界
  lower_bound = 0
  upper_bound = array.length - 1

  # 循环检查上界和下界之问的最中间的元素
  while lower_bound <= upper_bound do
    # 如此找出最中间的格子之索引
    # (无须担心商是不是整数,因为 Ruby 总是把两个整数相除所得的小数部分去掉)
    midpoint = (upper_bound + lower_bound) / 2

    # 获取该中间格子的值
    value_at_midpoint = array[midpoint]

    # 如果该值正是我们想查的,那就完事了。
    # 否则,看你是要往上找还是往下找,来调整下界或上界
    if value < value_at_midpoint
      upper_bound = midpoint - 1
    elsif value > value_at_midpoint
      lower_bound = midpoint + 1
    elsif value == value_at_midpoint
      return midpoint
    end
  end

  # 当下界超越上界,便知数组里并没有我们所要找的值
  return nil
end

 图1 线性查找和二分查找的时间复杂度

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值