二分查找法
思路:先将列表中间的元素与要查找的元素比较,如果相等直接返回,如果大了,将中间元素后面的列表元素排除,再在列表开始到列表中间元素之间进行相同操作,直到查找到匹配的元素。
时间复杂度:O(log2 n)
代码:
java:
public static int binarySearch(int []arr,int target,int low,int high){ if (arr[low]==target){ return low; } if (arr[high]==target){ return high; } int mid = (high + low) / 2 ; if (arr[mid] == target){ return mid; } if (arr[mid] > target){ return binarySearch(arr,target,low,mid-1); } if (arr[mid] < target){ return binarySearch(arr,target,mid + 1,high); } return -1; } public static int binarySearch2(int []arr,int target){ int low = 0 ; int high = arr.length -1 ; while (low<=high){ if (arr[low]==target){ return low; } if (arr[high]==target){ return high; } int mid = (high + low) / 2 ; if (arr[mid] == target){ return mid; } if (arr[mid] > target){ high = mid - 1; } if (arr[mid] < target){ low = mid + 1; } } return -1; }
|
python:
def binary_search(arr:list, target, start, end): if arr[start] == target: return start if arr[end] == target: return end mid = int((end + start) / 2) if arr[mid] == target: return mid if arr[mid] > target: return binary_search(arr, target, start, mid - 1) if arr[mid] < target: return binary_search(arr, target, mid + 1, end) return None
def binary_search_2(arr:list, target): low = 0 high = len(arr) - 1 while low <= high: if arr[low] == target: return low if arr[high] == target: return high mid = int((low + high) / 2) guess = arr[mid] if guess == target: return mid if guess > target: low = low + 1 if guess < target: high = high + 1
return None
|