在程式設計珠璣和程式設計之美上都有討論,這篇部落格總結一下相關知識。
最一般的binary search的遞迴和迭代如下(預設非空):
#include #include #include using namespace std;
/* 下面為遞迴和迭代兩種,思路相同,當有重複數字時,隨機的返回乙個index。
*/int binary_search_recursive(std::vectorinputdata,
int key, int low, int high)
}int binary_search_iterative(std::vectorinputdata,
int key, int low, int high)
return -1;
}int main();
std::vectorinputdata(data, data+sizeof(data)/sizeof(int));
int key = 2;
cout << binary_search_iterative(inputdata, key, 0, inputdata.size()-1);
return 0;
}
如果出現重複元素,則面試者會提出一些要求,比如查詢相同元素的index最大的那個,下面的**根據程式設計之美寫的,很巧妙。
/*
[程式設計之美]查詢相同的最大座標,這個也很容易改為查詢最小座標的。
*/int binary_search_iterative_equality_max(std::vectorinputdata,
int key, int low, int high)
if(inputdata[high] == key)
return high;
else if(inputdata[low] == key)
return low;
else
return -1;
}
我們看**的時候一定要結合自己的分析過程,才能很徹底的理解這個演算法。
一開始,我也自己根據自己的理解寫了下面的**,根據我自己的test case覺得可以的。
/*
查詢相同的最大座標
*/int binary_search_iterative_equality_max(std::vectorinputdata,
int key, int low, int high)
if(inputdata[high] == key)
return high;
else if(inputdata[low] == key)
return low;
else
return -1;
}
ps:作為一名員工,有些事情,要盡量去做,不要等到老闆叫你去做你才去做,凡事要主動些,這樣才能上位。
深入學習BinarySearch
這個陣列是排序好的,這時我們就可以使用二分查詢去找這個數,我們可以選擇陣列中間的元素,這個中間元素會把陣列分成前後兩個相等的區間,如果我們要找的元素比中間元素要大,證明這個元素只可能在後半部分區間,我們就只需要去到後半部分區間用類似的方法再次查詢 如果比中間元素要小,則需要去到前半部分區間用類似的方...
Binary Search 方法題型彙總
作為log n search 方法的典型,binary search基本可以分為以下幾類 search 準確number的 search 最小differnece的 search closest的,這個又可以分為略微小於和略微大於的。search min or max 有重複的 非單項sorted的...
二分查詢 Binary Search
打算重返c c 陣營,所以準備從演算法開始溫習,今天我們談到的是一種效率較高的查詢方法 二分查詢。什麼是二分查詢 二分查詢又稱折半查詢,它是一種效率較高的查詢方法。二分查詢要求 線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。二分查詢的基本思想是 1 首先確定該區間的中點位置 ...