首页 > 编程语言 >查找算法

查找算法

时间:2023-10-20 15:35:41浏览次数:25  
标签:search 下标 元素 列表 算法 查找 li

顺序查找(线性查找)

  1. 思想:根据列表下标的顺序,一步步查找列表中的元素是否有与需查找元素相对应,有则返回下标。
  2. 代码实现
# 顺序查找
def linear_search(li,e):
    for ind,val in enumerate(li):
        if val == e:
            return ind
    else:
        return None
li = list(range(10))
import random
random.shuffle(li)
print(li)
print(linear_search(li,8))
  1. 时间复杂度:O(n)(对列表元素进行一次遍历)

二分查找

  1. 思想:前提为有序列表,对列表进行平均分割,当待找元素大于分割界为下标的元素时,往分割线的后半部分进行查找,否则往分割线前半部分查找
  2. 代码实现
# 折半查找
def binary_search(li,value):
    left=0                      # 设置左边下标
    right=len(li)-1             # 设置右边下标
    while left<=right:          # 当剩余元素不为0时
        mid=(left+right)//2     # 设置中间下标(以中间下标的值作为分裂口)
        if li[mid]>value:
            right=mid-1
        elif li[mid]<value:
            left=mid+1
        else:
            return mid
    else:
        return None
li = list(range(50))
print(li)
print(binary_search(li,20))
  1. 时间复杂度:O(nlogn)(存在折半查找)

标签:search,下标,元素,列表,算法,查找,li
From: https://www.cnblogs.com/byyya/p/17777210.html

相关文章

  • Winform中加密时提示此实现不是Windows平台FIPS验证的加密算法的一部分
    场景Java与Winform进行AES加解密数据传输的工具类与对应关系和示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/129357081winform中使用如上进行加密时提示:实现不是Windows平台FIPS验证的加密算法的一部分 注:博客:https://blog.csdn.net/badao_liumang_q......
  • 三种基本排序算法:桶排序,冒泡排序,快速排序
    第一节桶排序(最快最简单的排序)1、概括就实现申请大小为的数组为例,inta[11]。首先将所有变量初始化为0,表示还没有出现过任何数字。下面开始处理得到的数字:若存入的第一个数字是5,就将相对应的a[5]的值在原来的基础上增加1.即将a[5]的值从0改为1,表示5出现过一次。若第二个......
  • 排序算法总结
    lowB三人组冒泡排序思想:列表相邻元素两两对比,每趟结束都会产生一个最大/最小元素代码实现defbubble_sort(li):foriinrange(0,len(li)-1):#趟数exchange=0#设置一个标识符,当有一趟无变化时,列表已有序,停止排序forjinrange(0,len(......
  • 数据结构之美:如何优化搜索和排序算法
    文章目录搜索算法的优化1.二分搜索2.哈希表排序算法的优化1.快速排序2.归并排序总结......
  • 文心一言 VS 讯飞星火 VS chatgpt (106)-- 算法导论10.1 4题
    四、用go语言,重写ENQUEUE和DEQUEUE的代码,使之能处理队列的下溢和上溢。文心一言:在Go语言中,我们可以使用切片来实现队列。下面是如何实现ENQUEUE和DEQUEUE操作,同时处理队列的下溢和上溢的情况:packagemainimport"fmt"typeQueuestruct{elements[]i......
  • 文心一言 VS 讯飞星火 VS chatgpt (105)-- 算法导论10.1 3题
    三、用go语言,仿照图10-2,画图表示依次执行操作ENQUEUE(Q,4)、ENQUEUE(Q,1)、ENQUEUE(Q,3)、DEQUEUE(Q)、ENQUEUE(Q,8)和DEQUEUE(Q)每一步的结果,队列初始为空,存储于数组Q[1…6]中。文心一言:在这个问题中,我们尝试使用Go语言来模拟队列的操作,并且展示每一步的结果。首先,我们需要定义......
  • 文心一言 VS 讯飞星火 VS chatgpt (107)-- 算法导论10.1 5题
    五、用go语言,栈插入和删除元素只能在同一端进行,队列的插入操作和删除操作分别在两端进行,与它们不同的,有一种双端队列(deque),其插入和删除操作都可以在两端进行。写出4个时间均为O(1)的过程,分别实现在双端队列的两端插入和删除元素的操作,该队列是用一个数组实现的。文心一言:在Go......
  • 文心一言 VS 讯飞星火 VS chatgpt (104)-- 算法导论10.1 2题
    二、用go语言,说明如何在一个数组A[1…n]中实现两个栈,使得当两个栈的元素个数之和不为n时,两者都不会发生上溢。要求PUSH和POP操作的运行时间为O(1)。文心一言:在这个问题中,我们要在一个数组A[1…n]中实现两个栈,使得当两个栈的元素个数之和不为n时,两者都不会发生上溢。这......
  • 文心一言 VS 讯飞星火 VS chatgpt (103)-- 算法导论10.1 1题
    一、用go语言,仿照图10-1,画图表示依次执行操作PUSH(S,4)、PUSH(S,1)、PUSH(S,3)、POP(S)、PUSH(S,8)和POP(S)每一步的结果,栈S初始为空,存储于数组S[1…6]中。文心一言:图10-1展示了在执行一系列栈操作后栈的状态。我会用文字描述来模仿这个图,因为目前我无法直接绘制图片。栈S初始......
  • 10.20算法
    位1的个数编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为'1'的个数(也被称为汉明重量)。 提示:请注意,在某些语言(如Java)中,没有无符号整数类型。在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号......