注意事项:
1,(hight-low)//3 标记点flag1取整 相当于忽略了一个点,如 (2-1)//3=0 ;(2-0)//3=0
因此临界点一定要留意。
2,low,flag1,flag2,hight,都是列表下标,而value是list值, 不小心会出现不必要的坑。
#low,hight列表初始下标,value 为要查找的值 lis为列表
def find_three_div(lis,low,hight,value):
flag1=(hight-low)//3 #把列表分成三段的第一个标记点
flag2=(hight-low)//3*2 #把列表分成三段的第二个标记点
if lis[low]==value:
return low
elif lis[hight]==value:
return hight
elif lis[flag1]==value:
return flag1
elif lis[flag2]==value:
return flag2
elif value<lis[flag1]:
return find_three_div(lis,low+1,flag1-1,value)
elif value<lis[flag2]:
return find_three_div(lis,flag1+1,flag2-1,value)
elif value<lis[hight]:
return find_three_div(lis,flag2+1,hight-1,value)
else:
return -1
if __name__=='__main__':
lis=[0,1,2,3,4,5,6,7,8,9]
v=find_three_div(lis,0,9,8)
print(v)