二分搜索技术实现

一、算法介绍

    折半查找法也称为二分查找法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。

注:二分搜索技术的使用前必须对待查找序列进行排序

二、核心代码

    非递归实现二分查找算法

int BinarySearch(int *L, int l, int r, int n)
{//二分搜索非递归实现
    while(l <= r)
    {
        int mid = (l+r) / 2;
        if(n == L[mid])//查找到数据
            return mid;
        else if (n > L[mid])//数据在右半区
            l = mid + 1;
        else//数据在左半区
            r = mid - 1;
    }
}

递归实现二分查找算法

int BinarySearch(int *L, int l, int r, int n)
{//二分搜索递归实现
    int mid = (l+r)/2;
    //终止条件
    if(n == L[mid])
        return mid;
    else if(n > L[mid])
        BinarySearch(L, mid+1, r, n);//数据在右半区
    else
        BinarySearch(L, l, mid - 1, n);//数据在左半区
}


三、整体代码

#include <bits/stdc++.h>

using namespace std;

int Compare(const void *a, const void *b)
{//比较函数
    return *(int*)a - *(int*)b;//升序排序
}

int BinarySearch(int *L, int l, int r, int n)
{//二分搜索非递归实现
    while(l <= r)
    {
        int mid = (l+r) / 2;
        if(n == L[mid])
            return mid;
        else if (n > L[mid])//数据在右半区
            l = mid + 1;
        else//数据在左半区
            r = mid - 1;
    }
}

//int BinarySearch(int *L, int l, int r, int n)
//{//二分搜索递归实现
//    int mid = (l+r)/2;
//    //终止条件
//    if(n == L[mid])
//        return mid;
//    else if(n > L[mid])
//        BinarySearch(L, mid+1, r, n);//数据在右半区
//    else
//        BinarySearch(L, l, mid - 1, n);//数据在左半区
//}

int main()
{
    //定义
    int L[1010];
    int n;
    int len = 1000;
    int l = 0;
    int r = len-1;
    int ans = -1;
    //初始化样例
    for(int i= 0;i < len;i++)
        L[i] = len - i;
    //输入
    scanf("%d", &n);
    //处理
    qsort(L, len, sizeof(int), Compare);//排序
    ans = BinarySearch(L, l, r, n);//二分查找;
    //输出
    if( ans == -1)
        printf("未找到!");
    else
        printf("%d" , ans);
    return 0;
}

阅读更多
个人分类: 算法设计
想对作者说点什么? 我来说一句

二分搜索BinarySearch

2015年04月12日 983B 下载

没有更多推荐了,返回首页

不良信息举报

二分搜索技术实现

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭