binary search
二分查詢也稱折半查詢,它是一種效率較高的查詢方法;使用二分查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。
基本原理
①.查詢:因為序列已經單調且有序排列,從中間位置開始比較,一次可以排除一半的資料,不斷縮小查詢範圍;
②.終止條件:找到了目標值,或者左右邊界已經構不成有效區間;
③.左右邊界:理想情況下右邊界不斷縮小以逼近目標位置,左邊界不斷增大以逼近目標位置。
// target == key
// 找到目標值或者構不成有效區間就返回
int binarysearch( vector& nums, int target)
else if( nums[mid] < target )// mid 值小,需要增加左邊界,且 mid 位置已排除
else if( nums[mid] > target )// mid 值大,需要縮小右邊界,且 mid 位置已排除
return -1;//沒有找到目標值}}
// target > key
// 不斷縮小右邊界使其不斷逼近目標位置,當最後一下縮小位置後恰好不滿足條件,因此返回 right+1 ,即 left
int binarysearch( vector& nums, int target)
else if( nums[mid] > target )// 找到了乙個符合條件的值,縮小右邊界,看有沒更符合條件的值
}return left <= nums.size()-1 ? left :-1;//判斷是否出界
}
// target >= key
// 不斷縮小右邊界使其不斷逼近目標位置,當最後一下縮小位置後恰好不滿足條件,因此返回 right+1 ,即 left
int binarysearch( vector& nums, int target)
else if( nums[mid] < target )// mid 值小,需要增加左邊界,且 mid 位置已排除
}return left <= nums.size()-1 ? left :-1;//判斷是否出界
}
// target == key
// 不斷縮小右邊界使其不斷逼近目標位置,當最後一下縮小位置後恰好不滿足條件,因此返回 right+1 ,即 left
int binarysearch( vector& nums, int target)
else if( nums[mid] < target )// mid 值小,需要增加左邊界,且 mid 位置已排除
if( nums[mid] == target )//找到了乙個符合條件的值,縮小右邊界,看有沒更符合條件的值
return left <= nums.size()-1 && nums[left] == target ? left :-1;//判斷是否出界}}
// target < key
// 不斷增大左邊界使其不斷逼近目標位置,當最後一下增加位置後恰好不滿足條件,因此返回 left-1 ,即 right
int binarysearch( vector& nums, int target)
else if( nums[mid] < target )//找到了乙個符合條件的值,增加左邊界,看有沒更符合條件的值
}return right >= 0 ? right :-1;//判斷是否出界
}
// target <= key
// 不斷增大左邊界使其不斷逼近目標位置,當最後一下增加位置後恰好不滿足條件,因此返回 left-1 ,即 right
int binarysearch( vector& nums, int target)
else if( nums[mid] <= target )//找到了乙個符合條件的值,增加左邊界,看有沒更符合條件的值
}return right >= 0 ? right :-1;//判斷是否出界
}
// target == key
// 不斷增大左邊界使其不斷逼近目標位置,當最後一下增加位置後恰好不滿足條件,因此返回 left-1 ,即 right
int binarysearch( vector& nums, int target)
else if( nums[mid] == target )//找到了乙個符合條件的值,增加左邊界,看有沒更符合條件的值
else if( nums[mid] < target )// mid 值小,需要增加左邊界,且 mid 位置已排除
}return right >= 0 && nums[right] == target ? right :-1;//判斷是否出界
二分查詢詳解
演算法概括 二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將...
二分查詢詳解
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。假設我們比較的有序數列有三個數,我們比較乙個元素的值和陣列中間位置的元素的值進行比較,如果比中間的元素大,則在有序陣列的後半部分進行查詢 如果中間...
二分查詢的應用
二分查詢是一種很有效率的查詢方式,每次查詢後餘下的區間是指數級遞減的。二分查詢的限制也很明顯,就是資料必須是拍過序的。首先我們來看通過二分查詢的方式來計算乙個數的平方根 def mysqrt n int,left int,right int,bit num float mid left right ...