二分查詢(非遞迴實現)
二分查詢的前提是有序,並且每次查詢的範圍都是閉區間
#include
#include
#include
using
namespace std;
int a[10]
=;intmain()
else
if(a[mid]
> n) right = mid -1;
else
if(a[mid]
< n) left = mid +1;
}if(!flag)
scanf
("抱歉,未找到");
system
("pause");
return0;
}
二分查詢(遞迴實現)#include
#include
#include
using
namespace std;
int a[10]
=;bool
binarysearch
(int left,
int right,
int n)
else
if(a[mid]
> n)
return
binarysearch
(left, mid -
1, n)
;else
return
binarysearch
(mid +
1, right, n);}
intmain()
查詢第乙個大於目標值元素的下標#include
#include
#include
using
namespace std;
int a[11]
=;//在乙個有重複元素的陣列中找到第乙個大於等於目標值的下標
intlowerbound
(int left,
int right,
int n)
return left;
}int
main()
大於目標值的第乙個元素下標**與上乙個類似,只是在判斷時稍微改了改哦,注意初始的left 和 right 應該包括所有可能出現的結果,即要輸入[0,n]
#include
#include
#include
using
namespace std;
int a[11]
=;//在乙個有重複元素的陣列中找到第乙個大於目標值的下標
intlowerbound
(int left,
int right,
int n)
return left;
}int
main()
在乙個有序陣列中查詢滿足任意條件的第乙個元素在模板中,無論陣列是增序還是降序,都要先判斷是否滿足條件,因為一旦滿足條件就要去左區間尋找,才會找到第乙個元素。歐耶!!!
如果找滿足條件的最後乙個元素,可以先找到不滿足條件的最後乙個元素,然後減一;
#include
#include
#include
using
namespace std;
int a[11]
=;//在乙個有重複元素的陣列中找到第乙個大於目標值的下標
intlowerbound
(int left,
int right,
int n)
return left;
}int
main()
二分法的應用
裝水問題
木條切割問題
快速冪
#include
#include
#include
using
namespace std;
typedef
long
long ll;
ll binarypower
(ll a, ll b, ll m)
//如果指數為偶數,則返回 b / 2
else
}int
main()
合併兩個有序陣列#include
#include
#include
using
namespace std;
typedef
long
long ll;
int a[3]
=, b[3]
=, c[10]
=;void
merge1
(int a,
int b,
int c,
int m,
int n)
else
if(a[i]
> b[j]
) c[k++
]= b[j++];
}//如果有乙個陣列沒有輸出完,就全部輸出
while
(i < m) c[k++
]= a[i++];
while
(j < n) c[k++
]= b[j++];
}int
main()
演算法筆記 二分查詢(上)
5.總結 二分查詢針對的是乙個有序的資料集合,查詢思想有點類似分治思想。每次都通過跟區間的中間元素對比,將待查詢的區間縮小為之前的一半,直到找到要查詢的元素,或者區間被縮小為 0。二分查詢是目前為止遇到的第乙個時間複雜度為 o logn 的演算法。堆 二叉樹的操作等等,它們的時間複雜度也是 o lo...
C 演算法筆記 二分查詢演算法
1 目的 給定乙個陣列和乙個目標值,返回該目標值在陣列中第一次出現位置的下標。2 限制 1 該陣列必須滿足順序儲存結構。2 必須按關鍵字大小有序排列。3 原理 每次取陣列正中間的值與目標值比較,若相等則返回該中間值的下標,若目標值大於中間的值則取中間值的後半部分作為乙個新的陣列 保留原下標 重複第一...
查詢演算法 二分查詢
利用二分查詢演算法查詢某乙個元素,前提條件是該被查詢的元素是乙個已經有序的陣列。二分查詢的思想是將陣列元素的最高位 high 和最低位 low 進行標記,取陣列元素的中間 mid 和和要查詢的值 key 進行比較,如果目標值比中間值要大,則將最低位設定為mid 1,繼續進行查詢。如果目標值小於中間值...