1. 程式人生 > 其它 >[演算法] 二分查詢(C++)

[演算法] 二分查詢(C++)

不想廢話了!

條件:升序陣列;

結果:找得到的話返回 陣列下標,找不到則返回 -1

迴圈

//二分查詢-迴圈(升序陣列)
int binarySearch(vector<int>& nums, int target) {
    int start = 0, end = nums.size() - 1, mid = 0;
    while (start <= end) {
        //mid=(start+end)/2;    //可以用這個,但是 "start+end" 有可能會造成溢位
        mid = start + (end - start) / 2;
        
if (nums[mid] == target) return mid; else if (nums[mid] > target) end = mid - 1; else start = mid + 1; } return -1; }

遞迴

int search(vector<int>& nums, int target) {
    return binarySearch(nums, target, 0, nums.size() - 1);
}
//二分查詢-遞迴(升序陣列) int binarySearch(vector<int>& nums, int target, int start, int end) { if (start > end) return -1; int mid = (start + end) / 2; if (nums[mid] == target) return mid; else if (nums[mid] > target) //大於目標,則需要往前找 return binarySearch(nums, target, start, mid - 1
); else //小於目標,則需往後找 return binarySearch(nums, target, mid + 1, end); }

三個部分

  • 終止條件;
  • 中間值是否符合;
  • 繼續查詢;