---
# System prepended metadata

title: 二分搜實作
tags: [Coding]

---

---
tags: Coding
---
# 二分搜實作
搜尋之前都要排序過哦
## 遞迴版
```cpp=
int binary_search(int *a,int f,int e,int target){//陣列 第一個位置 最後位置 目標
    if(f<=e){
        int mid=(f+e)/2;
        if(target>a[mid]) return binary_search(a,mid+1,e,target);
        else if(target<a[mid]) return binary_search(a,f,mid-1,target);
        else if(target==a[mid]) return mid;//返回在陣列中的位置
    }
    return -1;//沒有就返回-1
}
```
## while迴圈版
```cpp=
int while_binary_search(int *a,int f,int e,int target){//陣列 第一個位置 最後位置 目標
    while(f<=e){
        int mid=(f+e)/2;
        if(target>a[mid]) f=mid+1;
        else if(target<a[mid]) e=mid-1;
        else if(target==a[mid]) return mid;
    }
    return -1;
}
```