数据结构与算法(一)

数据结构和算法
https://visualgo.net/zh
算法:
————————————————————————————————————————————————————————————————
查找算法:
顺序查找:

查找方式:find, rfind, index, rindex

while 
def sequential_search(item, list):
	i = 0
	while i < len(list):
		if item == list[i]:
			return i
		i += 1
	else:
		return -1

————————————————————————————————————		
for 
def sequential_search(item, list):
	# enumerate() 得到的是N个元组,包含索引和单个元素组成的元组
	for t in enumerate(list):
		if item == t[1]:
			return t[0]
	else:
		return -1
		
————————————————————————————————————
def sequential_Search(item,list):
    i = 0
    while i < len(list):
        if item == list[i]:
            return i
            i += 1
    raise ValueError('没有目标元素')

————————————————————————————————————————————————————————————————
二分查找:

递归实现二分查找

def binarch_sarch(start, stop, item, list):
	mid = (start + stop) // 2
	if start > stop:
		return -1 
	else:
		if list[mid] == item:
			return mid
		elif list[mid] > item:
			return binarch_sarch(start, mid - 1, item, list1)
		else:
			return binarch_sarch(mid + 1, stop, item, list1)
	
————————————————————————————————————
循环实现二分查找
def binarch_sarch(item, list1):
	start = 0
	stop = len(list1) - 1
	while start <= stop:
		# 去中间元素
		mid = (start + stop) // 2
		if item == list1[mid]:
			return mid
		elif item > list1[mid]:
			start = mid + 1
		else:
			stop = mid -1
	return -1

————————————————————————————————————————————————————————————————
排序算法:
冒泡排序

list1 = [10, 20, 13, 80, 53, 0, -7]
# 拿其中一个数和其他数相比,所以是len(list1) - 1。控制两两比较
for i in range(len(list1) - 1):
	if list1[i] > list1[i + 1]:
		list1[i], list[i + 1] = list1[i + 1], list1[i]
print(list1)
# 得到的是最大值排在列表最后

print("——————————————————————")
我们在上一个循环之外再套一个循环
for i in range(len(list1) -1):
	for i in range(len(list1) - 1):
		if list1[i] > list1[i + 1]:
			list1[i], list1[i + 1] = list1[i + 1], list1[i]
print(list1)
# 得到的是一个按从小到大排序的一个顺序列表

print("——————————————————————")
最后我们最好将它封装起来,方便调用
def bubble_sort(list):
	for i in range(len(list1) -1):
		for i in range(len(list1) - 1):
			if list1[i] > list1[i + 1]:
				list1[i], list1[i + 1] = list1[i + 1], list1[i]
	print(list1)

选择排序:

def sel_sort(list1):
	# 把较小的数值都放在前面了,最后面自然就是最大的。所以只需要比较len(list) - 1 次
	for i in range(len(list) - 1):
		# 每一次循环都把最小值拿到前面去了, 所以我们比较的最小值就变成list[i]
		min = i
		# 每一次都要和从自身索引的下一位开始比较,一直到最后一位。所以len(list)不用-1
		for j in range(i + 1, len(list)):
			if list[j] < list[min]:
				min = j
		# 每一次只取最小值放在前面,所以剩余所有元素比较完之后,只交换一次就够了。
		list[i], list[min] = list[min], list[i]
		print("————————")
		print(list)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值