Python查找算法之 -- 列表查找和二分查找
一、列表查找:从列表中查找指定元素
- 输入:列表、待查找元素
- 输出:元素下标或未查找到元素
二、列表查找方式
- 顺序查找 : 从列表的第一个元素开始遍历,知道找到为止。时间复杂度O(n)
- 二分查找 :从有序的列表的候选区L[0:n]开始,通过堆待查找的值与候选区中间值进行比较,每次候选区数减少一半,时间复杂度O(logn)
顺序查找
def linear_search(data_set, value):
for i in range(range(data_set)):
if data_set[i] == value:
return i
return
三、二分查找
不使用递归的方式:
def binary_search(l,n):
low = 0
hight = len(l)
while low <= hight:
mid = (low + hight) // 2
if l[mid][id] < n:
print(l[mid])
low = mid + 1
elif l[mid][id] > n:
print(l[mid])
hight = mid - 1
else:
return mid
使用递归的方式:
def binary_search(l,aim,start= 0,end=None):
if end == None:end = len(l) - 1
if start <= end: # (end - start) // 2 + start 两种方法
mid = (end + start) // 2 #12 18
if l[mid] < aim:
return func(l,aim,start = mid + 1,end = end) # [42,43,55,56,66,67,69,72,76,82,83,88]
elif l[mid] > aim:
return func(l,aim,start = start,end = mid - 1)
elif l[mid] == aim:
return mid
else:
return None
要求列表是有序的,所以python中列表的查找,并不是采用的二分查找。
四、练习
LetCode网站题目: 现有一个学员信息列表(按id增序排列),格式为:
stu_info = [
{id:1001, "name":"张三", "age":20},
{id:1002, "name":"李四", "age":25},
{id:1004, "name":"王五", "age":23},
{id:1007, "name":"赵六", "age":33}
]
修改二分查找代码,输入学生id,输出该学生在列表中的下标,并输出完整学生信息。
def binary_search(l,n):
low = 0
hight = len(l)
while low <= hight:
mid = (low + hight) // 2
if l[mid][id] < n:
print(l[mid])
low = mid + 1
elif l[mid][id] > n:
print(l[mid])
hight = mid - 1
else:
return mid ret = binary_search(stu_info,1004)
print(ret)
Python查找算法之 -- 列表查找和二分查找的更多相关文章
- 递归分治算法之二维数组二分查找(Java版本)
[java] /** * 递归分治算法学习之二维二分查找 * @author Sking 问题描述: 存在一个二维数组T[m][n],每一行元素从左到右递增, 每一列元素从上到下递增,现在需要查找元素 ...
- 【算法训练营day1】LeetCode704. 二分查找 LeetCode27. 移除元素
[算法训练营day1]LeetCode704. 二分查找 LeetCode27. 移除元素 LeetCode704. 二分查找 题目链接:704. 二分查找 初次尝试 看到题目标题是二分查找,所以尝试 ...
- python 全栈开发,Day15(递归函数,二分查找法)
一.递归函数 江湖上流传这这样一句话叫做:人理解循环,神理解递归.所以你可别小看了递归函数,很多人被拦在大神的门槛外这么多年,就是因为没能领悟递归的真谛. 递归函数:在一个函数里执行再调用这个函数本身 ...
- 常见的排序算法(直接插入&选择排序&二分查找排序)
1.直接插入排序算法 源码: package com.DiYiZhang;/* 插入排序算法 * 如下进行的是插入,排序算法*/ public class InsertionSort { pub ...
- 【Java】 大话数据结构(10) 查找算法(1)(顺序、二分、插值、斐波那契查找)
本文根据<大话数据结构>一书,实现了Java版的顺序查找.折半查找.插值查找.斐波那契查找. 注:为与书一致,记录均从下标为1开始. 顺序表查找 顺序查找 顺序查找(Sequential ...
- 算法图解第一章_二分查找_python
什么是二分查找? 我们先玩一个游戏. 在1至100之间我写下一个数,由你来猜测这个数是多少.我会告诉你高了还是低了. 最简单的办法就是每次取一半. 例如 "50""低了& ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...
- 数组查找算法的C语言 实现-----线性查找和二分查找
线性查找 Linear Search 用户输入学生学号的成绩 二分查找 Binary Search 要求数据表是已经排好序的 程序存在小的瑕疵
- 集训第四周(高效算法设计)N题 (二分查找优化题)
原题:poj3061 题意:给你一个数s,再给出一个数组,要求你从中选出m个连续的数,m越小越好,且这m个数之和不小于s 这是一个二分查找优化题,那么区间是什么呢?当然是从1到数组长度了.比如数组长度 ...
随机推荐
- python获取命令行参数的方法(汇总)
介绍python获取命令行参数的方法:getopt模和argparse模块. python版本:2.7 一.getopt模块 主要用到了模块中的函数: options, args = getopt.g ...
- SSM项目POST中文乱码解决方案
在本地搞了一个SSM的项目练手,修改数据的时候,提交中文数据后居然乱码了.网上一顿狂搜,最终花了几个小时终于解决. 遂加以记录,以便不时之需. 就这么个表单,如果提交中文修改就会乱码,首先确定项目和数 ...
- BZOJ4589 Hard Nim(快速沃尔什变换FWT)
这是我第一道独立做出来的FWT的题目,所以写篇随笔纪念一下. (这还要纪念,我太弱了) 题目链接: BZOJ 题目大意:两人玩nim游戏(多堆石子,每次可以从其中一堆取任意多个,不能操作就输).$T$ ...
- 敏捷持续集成(Jenkins)
在前面已经完成git和gitlab的相关操作 1.持续集成的概念: 1. 什么是持续集成: 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可 ...
- 洛谷P4135 作诗
题意:[l,r]之间有多少个数出现了正偶数次.强制在线. 解:第一眼想到莫队,然后发现强制在线...分块吧. 有个很朴素的想法就是蒲公英那题的套路,做每块前缀和的桶. 然后发现这题空间128M,数组大 ...
- Centos6.6下编译安装Apache2.2.31
安装环境: [root@apache ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@apache ~]# uname -r ...
- (转)pythonC3线性算法
本文转自:http://kaiyuan.me/2016/04/27/C3_linearization/ 作者:Kaiyuan 注意:本文仅仅作为个人mark,所以排版并不如原文,另本文在原文基础上做了 ...
- Hadoop基础-MapReduce的常用文件格式介绍
Hadoop基础-MapReduce的常用文件格式介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MR文件格式-SequenceFile 1>.生成SequenceF ...
- axios 参数拼接
// 加载列表 getData () { this.$http .get("platform-framework/stucgbb/selectCHBBInit?type="+thi ...
- Dubbo学习笔记6:Dubbo增强SPI与SPI中扩展点自动包装的实现原理
在Dubbo整体架构分析中介绍了Dubbo中除了Service和Config层为API外,其他各层均为SPI,为SPI意味着下面各层都是组件化可以被替换的,也就是扩展性比较强,这也是Dubbo比较好的 ...