前面我們分別列出了遞增查詢法和二分查詢法,各有優缺點。遞增適用範圍廣,對陣列元素順序沒有要求,但效率較低;而二分法運算效率高,但對陣列元素的排列有要求需要從小到大排序好。因此我們可以將兩種演算法組合到乙個程式裡面,先去判斷給出的陣列元素是否已經排列好,若排列好就使用二分法查詢執行速度快,若沒有排序好就使用遞增法進行查詢,下面是實現**:
#include"stdafx.h"
#include
using namespace std;
bool check(int,int);
int findadd(int,int,int);
int findhalf(int,int,int);
bool check(int x,int n)
return true;
}int findadd(int a,int x,int n)
return n;
}int findhalf(int a,int x,int n)
}return n;
}int main()
;int a,check,add,half;
cout<<"請輸入需要查詢的數:";
cin>>a;
check=check(x,10);
if(check==true)
else
system("pause");
return 0;
}
選值 二分 組合數
題目描述 給定n個數,從中選出三個數,使得最大的那個減最小的那個的值小於等於d,問有多少種選法。第一行兩個整數n,d 1 n 100,000,1 d 1000,000,000 第二行n個整數滿足abs ai 1,000,000,000。資料保證a單調遞增。輸出乙個整數表示滿足條件的選法。4 3 1 ...
順序查詢法和二分查詢法
方法1 def shunxu f list,temp for index,i in enumerate f list if i temp return index return none方法2 def shunxu f flist,temp for i in range len f flist if...
AHOI2018初中組 二分查詢 分組
最開始是想二分答案的,但是沒有考慮到資料中重複的數值的情況,50 分 wa 了。但是這題顯然適合二分查詢 當我們的資料 在陣列中是線性排列的,就可以使用二分查詢。需要兩個輔助陣列 你甚至還會發現這題有點蜘蛛紙牌那味 霧 不多說閒話,下面是 二分查詢 設計乙個陣列 g 表示第 i 個分組中 需要加入的...