面試OR筆試40 二分查詢乙個函式解決多個問題

2021-08-08 08:23:10 字數 1889 閱讀 4608

(1)對於不下降序列a,求最小的i,使得a[i]= key;

(2)對於不下降序列a,求最大的i,使得a[i]= key;

(3)對於不下降序列a,求最小的i,使得a[i]> key;

(4)對於不下降序列a,求最大的i,使得a[i]< key;

(5)對於不上公升序列a,求最小的i,使得a[i]= key;

(6)對於不上公升序列a,求最大的i,使得a[i]= key;

(7)對於不上公升序列a,求最小的i,使得a[i]< key;

(8)對於不上公升序列a,求最大的i,使得a[i]> key。

而如果對於每個不同的型別都去具體實現,則會涉及二分向上或者向下取整,區間的開閉,以及判斷條件的改變等。情況太多,記起來特別麻煩還特容易混淆。

下面針對不下降序列,只用乙個二分查詢去實現(1)到(4)的不同功能。其中當存在i時則返回i,否則返回-1。

首先實現乙個 intbinarysearch(int *v, int vn, int k)的函式,v為輸入陣列(不下降序列),n為其長度,k為待查詢數值。該函式的功能為返回最小i,使得k<=v[i](也即k<=v[i] 且 v[i-1]下面利用該函式實現(1)到(4)

(1) int bs1(int*v, int vn, int k)

呼叫 index = binarysearch(v,vn,k),則有v[index-1](2) intbs2(int *v, int vn, int k)

呼叫 index = binarysearch(v,vn,k+1)-1,則有k+1 <=v[index+1]且 v[index] < k+1,

也即k < v[index+1] 且 v[index]<=k。因此當v[index]==k時,index就是所求;否則不存在。

(3) intbs3(int *v, int vn, int k)

呼叫 index = binarysearch(v,vn,k+1),則有k+1 <=v[index]且 v[index-1] < k+1,

也即v[index-1]<= k < v[index]。index即為所求。(返回尾後下標時特別處理)。

(4)int bs4(int*v, int vn, int k)

呼叫 index = binarysearch(v,vn,k)-1,則有k <=v[index+1]且 v[index] < k,

也即v[index]< k <= v[index+1]。index即為所求。index即為所求。

#include #include #include using namespace std;

int binarysearch(int *v, int vn, int k)

return lo;

}int bs1(int *v, int vn, int k)

int bs2(int *v, int vn, int k)

int bs3(int *v, int vn, int k)

int bs4(int *v, int vn, int k)

int main() , n = sizeof(a) / sizeof(a[0]);

cout << "輸入陣列:";

for (int k1(0);k1 < n;++k1) cout << setw(8) << a[k1] << ' ';

cout << endl << "陣列下標:";

for (int k1(0);k1 < n;++k1) cout << setw(8) << k1 << ' ';

cout << endl << "查詢數值" << " bs1 bs2 bs3 bs4" << endl;

for (int k1(1);k1 < n+1;++k1)

return 0;

}

乙個二分查詢程式

原問題來自 http topic.csdn.net u 20090826 18 c08b69e8 ce22 4427 8687 ffb53e380437.html 問題如下 有一連串字母,由且必由若干個 a,b,c,d,e 組成,順序是 若干個 a,若干個 b,若干個 c,若干個 d,若干個 e 即...

手寫乙個二分查詢

二分查詢演算法思想 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。class erfenfa sor...

python實現乙個二分查詢

二分查詢 二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列 查詢過程 首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表...