你的任務是實作二分搜尋演算法。
二分搜尋演算法會反覆把陣列切成兩半,只留下包含我們要找的項目的那一半,藉此在陣列中找到項目。 它可以讓我們快速縮小項目可能出現的位置,直到找到它,或是排除所有可能的位置。
二分搜尋只有在陣列已經排序過時才能運作。
這個演算法的流程如下:
來看一個例子:
假設我們要在下面這個已排序的陣列中尋找數字 23:[4, 8, 12, 16, 23, 28, 32]。
[23, 28, 32]。[23]。有時候,我們會需要引發例外。這麼做的時候,記得一定要附上有意義的錯誤訊息,指出錯誤的來源是什麼。這能讓你的程式碼更容易閱讀,對除錯也有很大的幫助。如果你知道錯誤來源會是某種特定的型別,可以選擇引發其中一種內建的錯誤型別,但仍然要附上有意義的訊息。
這個練習特別要求你,當給定的值無法在陣列中找到時,使用 raise 陳述句來「拋出」一個 ValueError。只有同時raise這個exception並附上訊息,測試才會通過。
若要引發帶有訊息的ValueError,請把訊息寫成exception型別的引數:
# example when value is not found in the array.
raise ValueError("value not in array")