day 3 数据结构与算法----- 搜索算法(1)

今天记录一个基础的搜索算法—搜索最小值

python 的 min函数其实就是返回列表中的最小项,所以想要研究这个算法的复杂度,我编写了一个min()函数的替代函数,它返回了最小项的索引。
算法思路:

  1. 首先将列表中的第一个位置的值(索引为0的位置)当做最小项;
  2. 向右依次循环搜索,与第一个位置的值作比较,如果找到了比第一个值更小的值,则将当前位置设为最小项的位置。

算法实现:

def indexmin(lists):                                    #定义indexmin()搜索最小值函数
    minindex = 0							        	#首先将第一个位置的元素设为最小值
    currentindex = 1							    	#设置第二个位置的变量
    while currentindex < len(lists) - 1:	        	#进入循环,比较列表中的每一个值
        if lists[minindex] > lists[currentindex]:		#将列表中的每一个元素与当前最小项元素进行比较
            minindex = currentindex					    #比较成功则将最小项的位置换到当前位置上
        currentindex +=1								#将当前的列表索引加一,继续循环
    return lists[minindex]								#返回列表的最小项

list1 = [2,3,4,5,6,7,3,4,5,2,1,3,4,4,3]
print(indexmin(list1))

好啦,现在我们考虑算法的复杂度。
代码中可以看到,在循环的外面,有3条指令执行相同的次数,而不管列表的长度。因此我们的算法复杂度不用考虑它们。在循环中还有3条指令。这包括if语句中的比较,minindex的重赋值,以及每次循环都要执行的currentindex的递增。
这个算法必须访问列表中的每一项元素,以确保它找到了最小项的位置。因此,对于长度为n的列表,这个算法必须进行n-1次的比较。所以,这个搜索最小值的算法的复杂度是O(n)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值