二分法及其拓展

2021-06-23 04:29:44 字數 1779 閱讀 9513

//二分查詢及其擴充套件實現

#include #include #include #include using namespace std;

// 二分尋找值為value的元素

int binary_search(vector&array, int left, int right, int value) //left right不能小於0

while (left <= right) // 寫成 left < right 可能找不到value 如 value = 5時 left==right才能找到value

else if (array[mid] > value)

else

}return -1;

}int binary_min_search(vector&array, int left, int right, int value) // 尋找值為value的最小下標元素

while (left < right) // left == right會無限迴圈

else if (array[mid] > value)

else

}if (array[left] == value)

else }

int binary_max_search(vector&arr, int left, int right, int value) // 尋找值為value的最大下標元素

while (left < right - 1) // left < right 的話可能陷入無限迴圈

else if (arr[mid] == value)

else

}if (arr[right] == value)

else if (arr[left] == value)

else }

int binary_justsmall_search(vector&arr, int left, int right, int value) // 尋找小於value的最大元素

while (left < right - 1)

else

}if (arr[right] < value)

else if (arr[left] < value)

else }

int binary_justgreater_search(vector&arr, int left, int right, int value) // 尋找大於的value的最小元素

while (left < right)

else

}if (arr[right] > value)

else }

int print(vector&arr)

cout << endl;

return 0;

}int main()

sort(arr.begin(), arr.end());

print(arr);

cout << binary_search(arr, 0, 9, 5) << endl;

cout << binary_min_search(arr, 0, 9, 5) << endl;

cout << binary_max_search(arr, 0, 9, 5) << endl;

cout << binary_justsmall_search(arr, 0, 9, 5) << endl;

cout << binary_justgreater_search(arr, 0, 9, 5) << endl;

return 0;

}

二分法及其應用

二分法,是通過不斷縮小解的可能存在的範圍,從而求得問題的最優解的方法。經常有二分與其他演算法結合的題目。1.從有序陣列查詢某個值 以stl中的lower bound與upper bound為例 lower boud begin,end,val 函式輸入需要查詢的有序數列前閉後開區間,查詢數列中第乙個...

二分法的簡單拓展

高中數學也好,初中數學也好,老師都講過二分法,這類題目多多少少也做過。比如計算根號2的值等等。計算根號2的值 近似的 思想還是二分法 計算根號2的近似值 const double eps 1e 5 doublef double x double calsort return left int mai...

演算法學習 二分法拓展

例1 如何計算2 sqrt 2 的近似值?對 f x x2 f x x f x x 2來說,在x 1,2 x in 1,2 x 1,2 的範圍內,f x f x f x 是隨著x xx 的增大而增大的,這就給二分法創造了條件,由於 2 sqrt 2 是無理數,因此只能獲得它的近似值,這裡不妨以精度到...