#算法:一种计算的方法
# 3+2
# 3*2+5
# 99*28 == (100-1)*28 == 28*100 - 28
# 典型问题:冒泡排序,快速排序,堆排序
# 查找算法
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# print(l.index(66))
# index = 0
# for i in l :
# if i == 66:
# print(index)
# index += 1
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
#二分查找算法
#66
# def find(lst,aim):
# mid = len(lst)//2
# if lst:
# if aim > lst[mid]:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif aim < lst[mid]:
# new_lst = lst[:mid]
# find(new_lst, aim)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
# find(l,36)
# def find(lst,66): #lst = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# mid = len(lst)//2 #mid = 12 = 25//2
# if lst:
# if 66 > 41:
# new_lst = lst[mid+1:] #new_lst = [42,43,55,56,66,67,69,72,76,82,83,88]
# find(new_lst,aim) #find([42,43,55,56,66,67,69,72,76,82,83,88],66)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #lst = [42,43,55,56,66,67,69,72,76,82,83,88],66
# mid = len(lst)//2 #mid = 12//2 = 6
# if lst:
# if 66 > 69: #66
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 69:
# new_lst = lst[:mid] #[42,43,55,56,66,67]
# find(new_lst, aim) #find([42,43,55,56,66,67],66)
# else:
# print('您要找的值不存在')
#
#
# def find(lst,aim): #[42,43,55,56,66,67],66
# mid = len(lst)//2 #mid = 3
# if lst:
# if 66 > 56:
# new_lst = lst[mid+1:] #66,67
# find(new_lst,aim) #find([66,67],66)
# elif aim < lst[mid]:
# new_lst = lst[:mid]
# find(new_lst, aim)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #[66,67],66
# mid = len(lst)//2 #mid = 1
# if lst:
# if 66 > 67:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 67:
# new_lst = lst[:mid] #[66]
# find(new_lst, aim) #find([66],66)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
#
# def find(lst,aim): #[66],66.5
# mid = len(lst)//2 #mid = 0
# if lst:
# if 66 > 66:
# new_lst = lst[mid+1:]
# find(new_lst,aim)
# elif 66 < 66.5:
# new_lst = lst[:mid] #[]
# find(new_lst, aim) #find([],66)
# else:
# print(aim,mid)
# else:
# print('您要找的值不存在')
# def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# if end == None:end = len(l) - 1 #start = 0,end = 24
# if start <= end:
# mid = (end-start) // 2 + start #mid = 12
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim: #
# find_2(l,aim,mid+1,end) #find_2(l,58,13,24)
# else:
# print(aim,mid)
# else:
# print('找不到这个值')
# l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# find_2(l,58)
#如果要找的值不存在
#返回值的问题
# def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# if end == None:end = len(l) - 1 #start = 13,end = 24
# mid = (end-start) // 2 + start #mid = 18
# if l[mid] > aim:
# find_2(l,aim,start,mid-1) #find_2(l,58,13,17)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end)
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# if end == None:end = len(l) - 1 #start = 13,end = 17
# mid = (end-start) // 2 + start #mid = 15
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end) #find_2(l,58,16,17) [56,66]
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# if end == None:end = len(l) - 1 #start = 16,end = 17
# mid = (end-start) // 2 + start #mid = 16
# if l[mid] > aim:
# find_2(l,aim,start,mid-1)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end) #find_2(l,58,17,17) [56,66]
# else:
# print(aim,mid)
#
# def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
# if end == None:end = len(l) - 1 #start = 17,end = 17
# if start > end:
# print('找不到这个值')
# mid = (end-start) // 2 + start #mid = 17
# if l[mid] > aim:
# find_2(l,aim,start,mid-1) #find_2(l,58,17,16)
# elif l[mid] < aim:
# find_2(l,aim,mid+1,end)
# else:
# print(aim,mid)
def find_2(l,aim,start=0,end=None): #[2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
if end == None:end = len(l) - 1 #start = 0,end = 24
if start <= end:
mid = (end-start) // 2 + start #mid = 12
if l[mid] > aim:
ret = find_2(l,aim,start,mid-1)
return ret
elif l[mid] < aim: #
ret = find_2(l,aim,mid+1,end) #find_2(l,58,13,24)
return ret
else:
return aim,mid
else:
print('找不到这个值')
l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88]
print(find_2(l,87))
#参数传递
#返回值的问题
#找不到值的问题
#参数太多的问题