折半查找法实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/isluckyguo/article/details/83713973

折半查找法的思想是:减少查找序列的长度,分而治之的进行关键字的查找。

方法一:迭代实现

#include <stdio.h>

int bin_search(int str[],int size,int key)
{
    int low,mid,high;
    low=0;
    high=size-1;

    while(low<=high)
    {
        mid=(low+high)/2;

        if(str[mid]==key)
            return mid;
        else if(str[mid]<key)
            low=mid+1;
        else if(str[mid]>key)
            high=mid-1;
    }

    return -1;
}

int main()
{
    int str[11]={1,1,2,3,5,8,13,21,34,55,89};
    int n,addr;
    
    printf("请输入要查找的关键字:");
    scanf("%d",&n);

    addr=bin_search(str,11,n);

    if(-1!=addr)
        printf("查找成功,要查找的关键%d在%d处\n",n,addr);
    else
        printf("查找失败");

    return 0;

}

方法二:递归实现:

#include <stdio.h>

int search(int str[],int n,int key)
{
    int m,low=0,high=n-1;
    int mid=(high+low)/2;

    if(str[mid]==key)
        return mid;

    if(str[low]>=str[high])
        return -1;

    if(str[mid]>key)
    {
        high=mid-1;
        m=search(&str[low],high-low+1,key);
    }
    else if(str[mid]<key)
    {
        low=mid+1;
        m=search(&str[low],high-low+1,key);
    }

    if(m!=-1)
        m=m+low;

    return m;
}

int main()
{
    int str[11]={1,1,2,3,5,8,13,21,34,55,89};
    int n,addr;

    printf("请输入要查找的关键字:");
    scanf("%d",&n);

    addr=search(str,11,n);

    if(addr!=-1)
        printf("查找成功,要查找的关键%d处于位置%d\n",n,addr);
    else 
        printf("查找失败\n");

    return 0;
}

猜你喜欢

转载自blog.csdn.net/isluckyguo/article/details/83713973
今日推荐