### 递归实现二分法
def func(my_list,num,start=0,end=None):
l = len(my_list)
end = l-1 if end is None else end
mid = (end-start)//2 + start
if end >= start:
if num > my_list[mid]:
start = mid + 1
end = end
return func(my_list,num,start=start,end=end)
elif num < my_list[mid]:
end = mid - 1
start = start
return func(my_list,num,start=start,end=end)
elif num == my_list[mid]:
return mid
else:
return "不存在"
else:
return "不存在"
### 非递归实现
def func1(my_list,data):
l = len(my_list)
start = 0
end = l - 1
while start <= end:
mid = (end - start) // 2 + start
if my_list[mid] > data:
end = mid - 1
elif data > my_list[mid]:
start = mid + 1
else:
return mid
return -1
my_list = [1,23,45,67,88,90,98,100]
data = 90
print(func(my_list,data))
print(func1(my_list,data))
def get_count(rotat_list):
length = len(rotat_list)
max_index = rotat_list.index(max(rotat_list))
count = length-max_index-1
return count
rotat_list = [90,98,100,1,23,45,67,88]
print(get_count(rotat_list))
def find_pos(rotat_list,data):
new_list = sorted(rotat_list)
origin_index = func1(new_list,data)
if origin_index == -1:
return -1
else:
count = get_count(rotat_list)
if origin_index > count:
rotat_list_index = origin_index - count
else:
rotat_list_index = origin_index - count + len(rotat_list)
return rotat_list_index
print(find_pos(rotat_list,23))
二分法编码实现及应用
最新推荐文章于 2023-03-13 22:05:31 发布