kata02:只有10%的程序员能写好的二分查找

二分查找又称为折半查找, 基本思想是对一个有序的列表去检索. 首先将查找值与列表中间位置上的值比较, 如果相等, 则检索成功. 若查找值小, 则在列表前半部分中继续进行二分查找.若查找值大, 则在列表后半部分中继续进行二分查找. 这样, 经过一次比较就缩小一半的查找区间, 如此进行下去, 直到查找成功或查找失败.

这个kata很简单, 用你熟悉的语言(一种)把二分查找, 实现5次.

目标

这个kata有三个独立的目标:

  1. 当你在写下每种实现的时候, 把你实现过程中的错误也记录下来.
  2. 你说一下你使用的实现优势是什么, 哪一个最可能进入生产环境, 哪一个最好玩, 哪一个最不容易跑起来?
  3. 想出5种方法是很难的, 特别是在想第四种和第五种的时候, 你是怎么突破自我的?

规范

输入int和int数组, 返回也是int(数组中的位置), 如果没查找到返回-1.
chop(int, array_of_int) -> int
这个kata不考性能和效率, 可以假设数组中的元素少于100,000个.

测试数据

这个是我用的测试数据, 你也可以自己构造或者换成适合你使用的语言, 我这里用的是ruby.

def 
    test_chop 
    assert_equal(-1, chop(3, [])) 
    assert_equal(-1, chop(3, [1])) 
    assert_equal(0, chop(1, [1])) 
    # 
    assert_equal(0, chop(1, [1, 3, 5])) 
    assert_equal(1, chop(3, [1, 3, 5])) 
    assert_equal(2, chop(5, [1, 3, 5])) 
    assert_equal(-1, chop(0, [1, 3, 5])) 
    assert_equal(-1, chop(2, [1, 3, 5])) 
    assert_equal(-1, chop(4, [1, 3, 5])) 
    assert_equal(-1, chop(6, [1, 3, 5])) 
    # 
    assert_equal(0, chop(1, [1, 3, 5, 7])) 
    assert_equal(1, chop(3, [1, 3, 5, 7])) 
    assert_equal(2, chop(5, [1, 3, 5, 7])) 
    assert_equal(3, chop(7, [1, 3, 5, 7])) 
    assert_equal(-1, chop(0, [1, 3, 5, 7])) 
    assert_equal(-1, chop(2, [1, 3, 5, 7])) 
    assert_equal(-1, chop(4, [1, 3, 5, 7])) 
    assert_equal(-1, chop(6, [1, 3, 5, 7])) 
    assert_equal(-1, chop(8, [1, 3, 5, 7]))
end
```
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift的二分法查找实践 在这篇教程中我们会使用计算机科学里一个基础的算法:二分法查找binary search...
    不是谢志伟阅读 5,941评论 1 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,132评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • CodeKata02地址 继续做CodeKata。 第二个Kata要求很简单:二分查找。现在不懂二分查找的程序员恐...
    梁杰_numbbbbb阅读 5,229评论 0 5
  • 有一次我在看书,无意间发现团子对我手上拿的书很有兴趣,玩具也不要,就伸手要我手上的书。她的这一举动提醒了我,是不是...
    余美鱼阅读 7,631评论 1 1