二分法

2018-06-12  本文已影响0人  AdmondGuo

核心代码:
注意:mid+-1很重要

int banarySearch(int a[],int left,int right,int x){   //左中右
    int mid;
    while(left<=right){
        mid=(left+right)/2;   //先进行mid初始化
        if (a[mid]==x) return mid;
        else if(a[mid]<x){
            left=mid-1; 
        }
        else{
            right=mid+1;
        }
    }
    return -1;
}

示例:在排好序的数组(升序排列)中寻找元素

#include <iostream>
#include <cstdio>
using namespace std;
int banarySearch(int a[],int left,int right,int x){   //左中右
    int mid;
    while(left<=right){
        mid=(left+right)/2;
        if (a[mid]==x) return mid;
        else if(a[mid]<x){
            left=mid-1;
        }
        else{
            right=mid+1;
        }
    }
    return -1;
}
int main(){
    int a[10]={1,3,4,6,7,8,10,11,12,15};
    printf("%d",banarySearch(a,0,9,6));    //注意下标
    system("pause");
    return 0;

}

上一篇 下一篇

猜你喜欢

热点阅读