二分查詢的各種應用詳解(C )

2021-10-08 05:00:59 字數 2510 閱讀 8437

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 ...