使用折半查找法查找数组中的元素

#include "stdio.h"
int bin_search(int key[],int n,int k)
{
    int  low = 0, high = n-1, mid;
    while(low<=high){
        mid = (low+high)/2;
        if(key[mid] == k) {
            return mid;        /*查找成功,返回mid*/
        } if (k > key[mid]) {
            low = mid + 1;        /*在后半序列中查找*/
        } else {
            high = mid - 1;        /*在前半序列中查找*/
        }
    }
    return -1;                    /*查找失败,返回-1*/
}

int bin_search_recur(int key[],int low, int high,int k)
{
    int mid;

    if(low>high)
        return -1;
    else{
        
        mid = (low+high) / 2;
        if(key[mid]==k) {
            return mid;
        }
        if(k>key[mid]) {
            return bin_search_recur(key,mid+1,high,k);        /*在序列的后半部分查找*/
        } else {
            return bin_search_recur(key,low,mid-1,k);            /*在序列的前半部分查找*/
        }    
    }
}


main()
{
    int key[10] = {1,3,5,7,10,12,15,19,21,50};    /*初始化一个整型数组*/
    int i,n ,addr;
    int k;
    printf("The contents of the Array key are\n");
    for(i=0;i<10;i++) {
        printf("%d ",key[i]);                    /*显示关键字数组key中的内容*/
    }
    printf("\nInput a interger for search\n");
    scanf("%d",&k);                                /*输入待查找的元素k*/
    addr = bin_search(key,10,k);                /*进行折半查找操作*/
    if(addr != -1) {                            /*返回值为不为-1,查找成功*/
        printf("key[%d] = %d\n ",addr,k);
    }else {
        printf("There is no %d in array key\n",k);        /*返回值为-1,查找失败*/
    }
    
    addr = bin_search_recur(key,0,9,k);
    if(addr != -1) {                            /*返回值为不为-1,查找成功*/
        printf("key[%d] = %d\n ",addr,k);
    }else {
        printf("There is no %d in array key\n",k);        /*返回值为-1,查找失败*/
    }
    getchar();
    getchar();
}

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/81178959