简单实现一下二分查找

我们昨天大致地讲了一下二分查找 的概念,今天我们要来学习一下如何用python代码把二分查找简单地实现一下。

好的,废话不多说,直接看代码:

def LSF(seq, number, lower, upper)
   if lower == upper:
       assert number == seq[upper]
       return upper
else:
   middle = (lower + upper)/2
   if number  > seq[middle]:
       return search(seq, number, middle +1, upper)
   else:
       return search(seq, number, lower, middle)

上面这段代码只是大概地实现了一下二分查找的功能,没有具体的赋值,我们来解析一下这段代码,可能看起来有一点点多。

我们先来解释一下上面每一个变量代表什么,seq表示寻找的序列,number表示要找的数,lower表示最低那个数的序号,upper则表示最高那个数的序号。

接下来解释一下语法,先判断是否只有一个数,也就是lower是否等于upper,如果等于就没比较的必要了,直接输出结果就行了,接下来就是运算一下lower不等于upper的情况。直接把所有的数对半分,接着进行比较,看一下number在哪一半里面,在进行对半分,知道找到number。

好的,今天的内容就讲到这里啦~内容不多,但是好好看一下上面那段代码哦~

(文章图片若有侵权,请联系作者删除)

原文地址:https://www.cnblogs.com/Galaxyfengfeng/p/9180633.html

时间: 2024-10-05 05:49:59

简单实现一下二分查找的相关文章

python常用的简单算法,二分查找、冒泡排序、数组翻转等

1.二分查找:主要用于查询元素数量较多的列表,采用二分查找,取中位值,进行大小比较,可以提高效率 1 #二分查找,用于在较大的数据列表中查询某个值,考虑到元素比较多,单纯的遍历会造成内存压力过大,考虑使用二分查找 2 #二分查找的关键在于查询中间值,将需要查找的值与中间值进行比较,然后确定查找方向 3 def binary_search(data_source,find_n): 4 #取中位数 5 mid=int(len(data_source)/2) 6 7 if len(data_sourc

javascript顺序数组简单实现个二分查找

直接上码了注释写得很详细: function bsearch(A,x){ //l:查找范围左 r:查找范围右 let l = 0, //查询范围左边界 r = A.length-1, //查找范围右边界 guess //中间猜测位置 while(l <= r){ //guess等于l,r中间位置 guess = Math.floor( (l+r)/2 ) //判断当前位置是否为要查找的值,是则返回下标 if(A[guess] === x) return guess //如果当前位置值大于要查询的

OC版二分查找

二分查找(也称折半查找)是很常见的一种在数组中查找数据的算法,作为一名程序员是应该必须会的.它的基础思想:获取数组的中间值,将数组分割成两份,利用中间值跟指定的值进行比较,如果中间值大于指定的值,就在数组的左边进行查找:如果中间值小于指定值,就在数组的右边进行查找.如此循环的执行下去,最终找到符合的值. 二分查找优点:1.速度快 2.比较次数少 3.性能好  当然了,缺点也很明显:1.必须是一个有序的数组(升序或者降序) 2.适用范围:适用不经常变动的数组 上源代码: - (void)viewD

二分查找的两种实现方式

笔者在这里给出二分查找的两种实现方式. 一. 第一种是健忘版的二分查找,即不管是否已经找到target,查找算法都继续对表进行再分,直到剩下的表的长度为1. 递归实现如下: Error_code recursive_binary_1(const Ordered_list &the_list, const Key &target, int bottom, int top, int &position) { Record data; if (bottom < top) { int

查找算法系列之简单查找:顺序查找、二分查找、分块查找

近期总结了各大排序算法的原理 ,并对其进行了实现,想着一并把查找算法总结了,今天就着手开始总结查找算法. 废话不多说,这篇文章从最简单的查找算法开始讲起,之后会补充复杂的二叉搜索树查找(BST)和B树,B+树查找以及哈希查找等. 顾名思义,查找就是寻找到关键字在队列中的位置,最笨的查找算法就是依次顺序比较,复杂度为O(n),但是有很多方法的复杂度可以达到O(logn)等等. 1.顺序查找 关键字与数组中的数顺序比较,时间复杂度O(n). template<class T> int OrderS

php 实现简单的二分查找

<?php #二分查找 function binarySearch($arr, $target) { $low = 0; $high = count($arr) - 1; while($low <= $high) { $mid = floor(($low + $high) / 2); #找到元素 if($arr[$mid] == $target) return $mid; #中元素比目标大,查找左部 if($arr[$mid] > $target) $high = $mid - 1; #

hdu 1969 Pie(贪心+二分查找)(简单)

Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5628    Accepted Submission(s): 2184 Problem Description My birthday is coming up and traditionally I'm serving pie. Not just one pie, no, I

二分查找总结

最近刷leetcode和lintcode,做到二分查找的部分,发现其实这种类型的题目很有规律,题目大致的分为以下几类: 1.最基础的二分查找题目,在一个有序的数组当中查找某个数,如果找到,则返回这个数在数组中的下标,如果没有找到就返回-1或者是它将会被按顺序插入的位置.这种题目继续进阶一下就是在有序数组中查找元素的上下限.继续做可以求两个区间的交集. 2.旋转数组问题,就是将一个有序数组进行旋转,然后在数组中查找某个值,其中分为数组中有重复元素和没有重复元素两种情况. 3.在杨氏矩阵中利用二分查

深入浅出数据结构C语言版(12)——从二分查找到二叉树

在很多有关数据结构和算法的书籍或文章中,作者往往是介绍完了什么是树后就直入主题的谈什么是二叉树balabala的.但我今天决定不按这个套路来.我个人觉得,一个东西或者说一种技术存在总该有一定的道理,不是能解决某个问题,就是能改善解决某个问题的效率.如果能够先了解到存在的问题以及已存在的解决办法的不足,那么学习新的知识就更容易接受,也更容易理解. 万幸的是,二叉树的讲解是可以按照上述顺序来进行的.那么,今天在我们讨论二叉树之前,我们先来讨论一种情形.一种操作:假设现在有一个数组,数组中的数据按照某