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