binary search及相關總結

2021-09-30 11:20:51 字數 1506 閱讀 9530

在程式設計珠璣和程式設計之美上都有討論,這篇部落格總結一下相關知識。

最一般的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 首先確定該區間的中點位置 ...