1. 程式人生 > >ACM演算法入門——二分查詢

ACM演算法入門——二分查詢

二分

概述:二分在查詢時用得比較多,複雜度為O(logn),使用二分的前提要求資料按非遞減順序排列(如:1 2 2 2 4 5 6 7),如果資料不為非遞減順序,需要對資料進行排序,排序複雜度為O(n*logn)。

程式碼演示:

#include <cstdio>
#include <iostream>
#include <cstring> //memset函式標頭檔案
#include <algorithm> //排序函式sort所在的標頭檔案
using namespace std;
const int MaxN = 1e5 + 5;
#define debug(x) cout << #x << "=" << x << endl;
int main(){ int n, m, t; int a[MaxN]; cin >> t; while(t--){ memset(a, 0, sizeof(a)); //清空陣列 cin >> n >> m; for (int i = 1; i <= n; i++) cin >> a[i]; // 輸入 sort(a + 1, a + 1 + n); //非遞減排序 int l = 1, r = n; int ans = 0
; while(l <= r) { //二分 int mid = (l+r) / 2; if(a[mid] >= m){ r = mid - 1; if(a[mid] == m) ans++; } else l = mid + 1; } cout << ans << endl; } return 0; } /*--------- 測試資料: 2 10 2 50 2 3 5 46 9 100 2 5 89 5 5 1 2 0 4 3 -----------*/

測試結果:
這裡寫圖片描述
讀者也可以自行輸入幾組資料測試