算法——顺序查找与二分法查找

本文通过实例代码展示了Python中顺序查找和二分查找的时间复杂度对比。顺序查找在未排序列表中查找一次耗时约0.02秒,而二分查找耗时几乎为0。当需要多次查找时,二分查找更为高效,但前提是列表必须排序。代码使用了装饰器来计算函数执行时间。
摘要由CSDN通过智能技术生成

本例中,顺序查找的时间复杂度为O(n),具体为1000000;二分法查找的时间复杂度为O(log(n)),具体为20,很明显二分法查找要快很多。但是二分法查找要求列表是排序好的,因为排序的时间复杂度与顺序查找相当,所以如果列表没有排序,而且我们只查找一次,则顺序查找更节省时间;如果我们要查找很多次,则二分法查找更节省时间。

cal_time.py代码如下:

import time

def cal_time(func):
	def wrapper(*args, **kwargs):
		t1 = time.time()
		result = func(*args, **kwargs)
		t2 = time.time()
		print('%s running time:%s secs' % (func.__name__, t2-t1))
		return result
	return wrapper

search.py代码如下:

from cal_time import *

@cal_time
def linear_search(li, val):
	for ind, v in enumerate(li):
		if v == val:
			return ind
	return None

@cal_time
def binary_search(li, val):
	left = 0
	right = len(li) - 1
	while left<=right:
		mid = (left+right) // 2
		if li[mid] == val:
			return mid
		elif li[mid] > val:
			right = mid - 1
		else:
			left = mid + 1
	return None

li = list(range(1000000))
ind = linear_search(li, 578000)
ind = binary_search(li, 578000)

运行结果:
linear_search running time:0.022967100143432617 secs
binary_search running time:0.0 secs

参考文献:B站教学视频——清华计算机博士带你学习Python算法和数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值