《演算法筆記》二分查詢

2021-10-04 11:32:18 字數 2795 閱讀 4226

二分查詢(非遞迴實現)

二分查詢的前提是有序,並且每次查詢的範圍都是閉區間
#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,繼續進行查詢。如果目標值小於中間值...