您好,登錄后才能下訂單哦!
維基百科:二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對(duì)數(shù)搜索(英語:logarithmic search),是一種在有序數(shù)組中查找某一特定元素的搜索算法。搜索過程從數(shù)組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數(shù)組為空,則代表找不到。這種搜索算法每一次比較都使搜索范圍縮小一半。
時(shí)間復(fù)雜度為。(n代表集合中元素的個(gè)數(shù))
空間復(fù)雜度。雖以遞歸形式定義,但是尾遞歸,可改寫為循環(huán)。
#include <iostream> using namespace std; #include <assert.h> //方法1:區(qū)間為[ ] /* int BinarySearch(int* a, int size, int x) { assert(a); int left = 0; int right = size - 1; while (left <= right) { int mid = left+(right - left) / 2; if (a[mid] < x) { left = mid + 1; } else if (a[mid] > x) { right = mid - 1; } else { return mid; } } return -1; }*/ //方法2:區(qū)間為[ ) int BinarySearch(int* a, int size, int x) { assert(a); int left = 0; int right = size; while (left < right) { int mid = left + (right - left) / 2; if (a[mid] < x) { left = mid + 1; } else if (a[mid] > x) { right = mid; } else { return mid; } } return -1; } void Test() { int array[] = {0, 1, 2, 3, 4, 5, 6, 7}; cout<<BinarySearch(array, sizeof(array)/sizeof(array[0]), 0)<<endl; } int main() { Test(); return 0; }
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。