数据结构与算法-查找算法

第二章 查找和排序算法
课时1:列表查找
1、列表查找的含义:从对象中查找某一个特定的元素
2、列表查找的方式包含两种:顺序查找和二分查找
3、顺序查找算法:从开始一直搜索到最后一个元素进行查找,for循环,时间复杂度为O(n);
4、二分查找针对有效的列表直接进行首尾二分查找,不断使得候选区减半,所以其时间复杂度为O(logn)
4、二分查找只针对排序有序的列表查找有效高速,顺序查找针对任何列表;
5、由于二分查找算法一般都需要进行排序,而排序算法的时间复杂度一般大于O(n),高于顺序查找;所以在内置的函数index中采用的依旧是顺序查表;

#导入函数运行时间测试函数from cal_time import *#查找算法#顺序查找/线性查找算法的含义@cal_timedef linear_search(l,v):    for i in range(len(l)):        if l[i]==v:            return i

#二分查找算法(有序的排列列表之下使用二分法)@cal_timedef binary_search(l,v):    left=0    right=len(l)-1    while(left<right):        mid = (left + right) // 2        if l[mid]==v:            return mid        elif l[mid]<v:            left=mid+1        else:            right=mid-1

l=list(range(10000))v=3890binary_search(l,v)linear_search(l,v)

原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12384824.html

时间: 2024-11-06 10:57:41

数据结构与算法-查找算法的相关文章

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当

2. C#数据结构与算法 -- 查找算法(顺序查找,哈希查找,二分查找(折半),索引,二叉)

1. 顺序查找算法 ===================================================== 算法思想简单描述: 最突出的查找类型就是从记录集的开始处顺次遍历每条记录,直到找到所要的记录或者是 到达数据集的末尾.这就是所谓的顺序查找.顺序查找(也被称为线性查找)是非常容易实现 的.从数组的起始处开始,把每个访问到的数组元素依次和所要查找的数值进行比较.如果找 到匹配的数据项,就结束查找操作.如果遍历到数组的末尾仍没有产生匹配,那么就说明此数 值不在数组内. ==

c++之STL(13) STL 算法 - 查找算法(4)find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp)

find_first_of(b,e,sb,se) find_first_of(b,e,sb,se,bp) 使用逆向迭代器 没有find_last_of算法 STL 查找算法 find() find_if() search_n() search() find_end() find_first_of() adjacent_find() string 查找函数和STL查找算法的比较 string函数    STL算法 find()                find() rfind()      

c++之STL(13) STL 算法 - 查找算法(1)

常用的查找算法如下: find() find_if() // search_n() search() find_end() find_first_of() adjacent_find() // 这两种方法通用,对所有容器试用,但是查找效率慢,是线性查找 find() 此复杂度是线性复杂度 find_if() 此复杂度是线性复杂度 注意: 1,如果是已序区间,可以使用  已序区间查找算法(binary_search includes()  lower_bound()  upper_bound())

数据结构复习之查找算法的总结回顾

一.查找的基本概念 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值得数据元素(或记录). 查找表(Search Table)是同一类型的数据元素(或记录)构成的集合. 查找表按照操作方式分为两大类: 静态查找表:只作查找操作的查找表. 顺序表查找.有序表查找.线性索引查找 动态查找表:在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个元素. 二叉排序树.平衡二叉树(AVL树).多路查找树(B树) 二.顺序表查询 这是最简单的一种,

数据结构和算法-查找算法-树和二叉树查找

 ######################################################## """ 一.树 1.什么是树? 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合. 把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的. 它具有以下的特点: 每个节点有零个或多个子节点: 没有父节点的节点称为根节点: 每一个非根节点有且只有一个父节点: 除了根节点外,每个子节点可以分为多个不相交的子树:

算法 查找算法--二分查找

二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列.该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分.接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在,具体的使用方法可通过下面的代码具体了解. 1 #include <stdio.h> 2 b

每天一点算法-查找算法-顺序查找

如何在一个集合中查找一个特定元素,判断其是否存在,最简单的算法循环该集合,从起点开始查找,一个个元素去比对 假设存在集合:int [] a = {1,2,3,4,5,6,7,8,9,10} 条件:查找7在数组a中是否存在 for(int i = 0;i< a.length - 1; i ++) { if(7 == a[i]) {   //存在 } } 此算法的优点是:简单,缺点是当集合大的时候,查找的效率低,从第一个查找到最后一个 原文地址:https://www.cnblogs.com/hpz

c++之STL(13) STL 算法 - 查找算法(2)

search_n() 用来查找连续的n个匹配的数值 或者 加谓词 search_n(b, e, c, v) search_n(b, e, c, v, p) 注意:该方法的第二种形式应该是search_n_if(b, e, c, p) #include<iostream> #include<algorithm> #include<deque> // #include<functional> // using namespace std; int main()