Python二分法搜索算法实例分析
作者:像风一样的自由 发布时间:2023-11-01 13:13:15
标签:Python,二分法,算法
本文实例分析了Python二分法搜索算法。分享给大家供大家参考。具体分析如下:
今天看书时,书上提到二分法虽然道理简单,大家一听就明白但是真正能一次性写出别出错的实现还是比较难的,即使给了你充足的时间,比如1小时。如果你不是特别认真的话,可能还是会出一些这样那样的错误,所以就尝试了自己去实现一下,看能否一次通过,结果自然不言而喻,虽然用的时间不长,但是我失败了,呵呵。
个人觉得失败的最主要原因是自己没有认真的先想好这个思路和可能出现的分支情况,而是直接凭主观臆想就去写代码了,完全正中书上所说的行为,所以也如书上所说,出错了。后经调试应该是得到了基本的正确算法,内容如下:
#!/usr/bin/env python
#encoding: utf-8
def half_search(search_arr, search_str):
lb = 0
ub = len(search_arr) - 1
for i in range(ub/2 + 1):
if lb > ub:
return -1
mid = (ub + lb)/2
if search_arr[mid] == search_str:
return mid
elif search_arr[mid] > search_str:
ub = mid - 1
else:
lb = mid + 1
if __name__=='__main__':
arr = [10,20,30,40,50,60,70]
print half_search(arr, 1)
print half_search(arr, 11)
print half_search(arr, 22)
print half_search(arr, 33)
print half_search(arr, 40)
print half_search(arr, 55)
print half_search(arr, 66)
print half_search(arr, 70)
print half_search(arr, 8)
结果:
-1
-1
-1
-1
3
-1
-1
6
-1
正整数代表在数组中的下标,3那就是第4个位置;-1代表不存在
总结:
实现简单的算法之前,如果已经有了一套最简易的实现【比如直接打印100条相似的内容】,不妨要想想是否还有更精巧的实现【可否用循环+参数化替代】;实现稍微复杂点的算法时,不妨先在纸上画出各种可能的验证情况,避免实现是缺胳膊短腿的;还有一点就是算法什么的还是要多练,不然稍微复杂的过一阵可能就会忘记细节了。我想这就叫术业有专攻吧!
希望本文所述对大家的Python程序设计有所帮助。


猜你喜欢
- 本文实例为大家分享了微信小程序实现底部导航带跳转功能的具体代码,供大家参考,具体内容如下index.wxml<!--底部导航 --&g
- fetchone() 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 Nonefetchall() 返回多个元组,即返回多个
- 本文实例讲述了Python实现快速排序的方法。分享给大家供大家参考,具体如下:说起快排的Python实现,首先谈一下,快速排序的思路:1、取
- 一、背景描述csv格式文件是一种类似于excel的文件格式asc格式文件是一种可以用text打开的文本文件csv转asc本来可以用arcgi
- 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename; 然后读取count(*
- 这里列出了javascript 中的document.execCommand() 的各种参数说明:2D-Position 允许通过
- 结论概括的来说,就是对修饰的变量进行拆分, 对修饰的形式参数进行参数聚集。单*号,将被修饰的变量按元素方式拆分, 对修饰的形式参数进行参数聚
- 前言在安装完python及pip,setuptools等工具后,即可以创建virualenv虚拟环境了,这个类似于虚拟机的工具,可以让同一台
- 写一个类似linux head的小工具,在window下用。head.py # -*- coding: UTF-8 -*-#!/u
- ● 脚本用途遍历文件夹下的文件,消除文件名前的特征字符串。● 脚本实现import os,sysimport refrom string i
- QTimer控件介绍如果在应用程序中周期性地进行某项操作,比如周期性的检测主机的cpu值,则需要用到QTimer定时器,QTimer类提供了
- 在网上找到的随机不重复查询代码:select top 15 * from article&
- 前言我们在上一期学习了关于Python 迭代器Iterator详情相关的概念,满足迭代器需要符合两个条件实现__iter__()方
- 如下所示:python 设置值import pandas as pdimport numpy as npdates = pd.date_ra
- 本文实例为大家分享了vue移动端图片裁剪上传的具体代码,供大家参考,具体内容如下1.安装cropperjs依赖库npm install cr
- 缘由新手学习 Django 当配置好 HTML 页面后,就需要使用一些静态资源,如图片,JS 文件,CSS 样式等,但是 Django 里面
- 本文总结分析了MySQL查询优化的技巧。分享给大家供大家参考,具体如下:熟悉SQL语句的人都清楚,如果要对一个任务进行操作的话,SQL语句可
- mysql 8.0.20 winx64.zip压缩版安装教程记录如下,分享给大家1.下载MySQL官网:链接直接点击链接也可以下载:mysq
- 问题的提出相传古时候有个退休的程序员,在家闲来无事,决定修习书法之道。第一日,备好笔墨纸砚,便挥毫写下一行大字:“Hello World”。
- 目标打包Python selenium 自动化脚本(如下run.py文件)为exe执行文件,使之可以直接在未安装python环境的windo