1. 程式人生 > >二分搜索算法

二分搜索算法

一次 sea 有序數組 而且 輸入 使用 using tps -i

目錄

  • 介紹
  • 時間復雜度和空間復雜度
    • 時間復雜度
    • 空間復雜度
  • 代碼實現

介紹

在計算機科學中,二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索算法。搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索算法每一次比較都使搜索範圍縮小一半。

時間復雜度和空間復雜度

時間復雜度

二分搜索在最壞情況下的復雜度是對數時間,進行O(logn) 次比較操作,n在此處是數組的元素數量。最好情況下O(1).

空間復雜度

如果叠代實現二分搜索則空間復雜度為O(1),如果遞歸實現空間復雜度為O(logn)。無論對任何大小的輸入數據,算法使用的空間都是一樣的。除非輸入數據數量很少,否則二分搜索比線性搜索更快,但數組必須事先被排序。盡管特定的、為了快速搜索而設計的數據結構更有效(比如哈希表),二分搜索應用面更廣。

代碼實現

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int nums[5] = {1,2,3,4,5};
    int target = 0;
    int left = 0,right = 4;
    int ans = -1;
    printf("請輸入target:");
    scanf("%d",&target);
    while(left <= right)
    {
        int mid = (left+right)/2;
        if(nums[mid] == target)
        {
            ans = mid;
            break;
        }
        else if(nums[mid] > target)
        {
            left = mid+1;
        }
        else if(nums[mid] < target)
        {
            right = mid-1; 
        } 
    }
    printf("%d",ans);
    return 0;   
} 

技術分享圖片

註意:結束條件是left <= right

二分搜索算法