對于要搜索的元素越多,二分查找速度比簡單查找快的更多 這是二分查找算法的優點,但二分算法也有缺點,二分算法只針對有序的列表,這樣插入和刪除就會很困難,因此,折半查找方法只適合不經常變動的有序列表
二分查找有個很重要的特點,就是不會查找數列的全部元素,而查找的數據量其實正好符合元素的對數,正常情況下每次查找的元素都在一半一半地減少。所以二分查找的時間復雜度為 O(log2n) 是毫無疑問的。當然,最好的情況是只查找一次就能找到,但是在最壞和一般情況下的確要比順序查找好了很多。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Solution: def search( self ,nums: List [ int ],target: int ) - > int : left = 0 right = len (nums) - 1 while (left< = right): mid = (left + right) / / 2 if nums[mid] = = target: return mid if nums[mid]<target: left = mid + 1 else : right = mid - 1 return - 1 |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
class Solution: def search( self ,nums: List [ int ],target: int ) - > int : left = 0 right = len (nums) - 1 while (left< = right): mid = (left + right) / / 2 if nums[mid] = = target: return mid if nums[mid]>target: left = mid + 1 else : right = mid - 1 return - 1 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Solution: def twoSum( self , numbers: List [ int ], target: int ) - > List [ int ]: for i in range ( len (numbers) - 1 ): left = i right = len (numbers) - 1 while (left< = right): mid = (left + right) / / 2 if numbers[mid] + numbers[i] = = target: return [i + 1 ,mid + 1 ] elif numbers[mid] + numbers[i]<target: left = mid + 1 else : right = mid - 1 return [ - 1 , - 1 ] |
總結
到此這篇關于python二分法查找的文章就介紹到這了,更多相關python二分法查找內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_51458838/article/details/121432897