python算法双指针问题:二分查找

匿名 (未验证) 提交于 2019-12-02 22:11:45

这里要注意的是//向下取整,下次循环时,如果大于查找的数字,start+1。

并且,只能向下取整,如果向上取整。

那么,在比较第一个数时,start = 0 。end = 1。mid = 1。就会进入死循环了。

切记切记。

import math a_list = [2, 5, 23, 45, 67, 89, 90, 123, 234, 345, 567, 7890, 12132]  guess_no = 67 answer = -1  start, end = 0, len(a_list)  while end - start > 1:     mid = (end + start) // 2     print(start, end, mid, a_list[mid])     if a_list[mid] == guess_no:         answer = guess_no         break     elif a_list[mid] < guess_no:         start = mid + 1     else:         end = mid else:     if a_list[start] == guess_no:         answer = guess_no         print('find it')  print(answer) # ==================上面为书,下面为自己================= answer = -1  start, end = 0, len(a_list) while start < end:     mid = math.floor((start + end) / 2)     print(start, end, mid, a_list[mid])     if guess_no < a_list[mid]:         end = mid     elif guess_no == a_list[mid]:         answer = guess_no         break     else:         start = mid + 1 print(answer)

输出:

0 13 6 90 0 6 3 45 4 6 5 89 find it 67 0 13 6 90 0 6 3 45 4 6 5 89 4 5 4 67 67  Process finished with exit code 0

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!