1. 程式人生 > >python算法雙指針問題:二分查找

python算法雙指針問題:二分查找

print roc 二分 一個數 clas end 自己 向下取整 math

這裏要註意的是//向下取整,下次循環時,如果大於查找的數字,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

python算法雙指針問題:二分查找