//二分查詢及其擴充套件實現
#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 是無理數,因此只能獲得它的近似值,這裡不妨以精度到...