算法基础-理论代码
# 循环打印“抱着抱着抱着我的小鲤鱼的我的我的我” def test(n): if n == 0: print("我的小鲤鱼", end='') else: print("抱着", end='') test(n-1) print("的我", end='') test(5)
#汉诺塔问题 t = 0 def hanoi(n, A, B, C): global t if n > 0: hanoi(n-1, A, C, B) t += 1 print("%s -> %s" % (A, C)) hanoi(n-1, B, A, C) # hanoi(8,'A','B','C') # print(t)
#查找 from timewrap import * #导入的是一个计算时间的装饰器 @cal_time #计算时间的装饰器 def binary_search(li, val): #二分查找法 low = 0 #左边从0算起 high = len(li) - 1 #右边从列表长度-1算起 while low <= high: #说明至少两个元素 mid = (low + high) // 2 #找到中间的那个值 if li[mid] > val: #如果中间值比要查找的那个值还大,说明你要查找的值在左边 high = mid - 1 elif li[mid] < val: #如果中间值比要查找的那个纸还小,说明你要查找的值在右边 low = mid + 1 else: #第三种可能性就是直接找到了 return mid else: return -1 #如果穿进去的值是一个空的列表 def find_a(nums, target): #nums是一个列表,target是你要查找的对象, low = 0 #左边从0开始算起 high = len(nums) - 1 #右边从最大长度-1开始算起 while low <= high: #至少有一个值 mid = (low + high) // 2 #中间值的索引 if target <= nums[mid]: #如果你要查找的值在中间值得左边 high = mid - 1 中间值为最大值 else: low = mid + 1 #中间值为最小值 #[1, 2, 2, 2, 4, 8, 10] if low < len(nums): return low else: return -1 def find_b(nums, target): low = 0 high = len(nums) - 1 while low <= high: mid = (low + high) // 2 if target < nums[mid]: high = mid - 1 else: low = mid + 1 if low < len(nums): return low else: return -1 @cal_time def linear_search(li, val): #li是列表,val是你要查找的值,找得到返回索引,找不到返回-1 try: return li.index(val) #返回索引 except ValueError: return -1 #找不到 li = [1,2,2,2,4,8,10] print(find_a(li, 10))
#利用二分查找法查找学生的详细信息并输出
l = [ {"id":1001, "name":"张三", "age":20}, {"id":1002, "name":"李四", "age":25}, {"id":1004, "name":"王五", "age":23}, {"id":1007, "name":"赵六", "age":33} ] def bin_search(data_set,value): low = 0 #最左边的 high = len(data_set) - 1 #最右边的 while low <= high: mid = (low+high) // 2 #中间的 if data_set[mid]["id"] == value: #如果中间这个值得id == value,就返回详细信息 return (mid,data_set[mid]) elif data_set[mid]["id"] > value: 如果这个id大于value值, high = mid -1 else: low = mid + 1 else: return (0,None) print("退出q请按Q") flag = True while flag: sid = input("请输入学生学号>>>:").strip() if sid.isdigit(): if sid.upper() == "Q": flag = False else: sid = int(sid) mid,infos = bin_search(l,sid) if not infos: print("抱歉,没有这个人") else: s = "学生学号:{id},姓名:{name},年龄:{age}".format(**infos) print("该学生的信息索引坐标是:%s"%mid) print("该学生的所有详细信息为:%s"%s)
本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/8399182.html