//迭代法实现
#include <stdio.h>
#include <stdlib.h>

int bin_search(int * arr,int key,int Count)
{
    int mid;
    int low = 0;
    int high = Count;

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

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

    return -1;

}

int main()
{
    int num[10] = {1,3,4,52,56,78,99,100,234,334};
    int rev ;
    rev = bin_search(num,334,10);//返回数组下标号
    if( rev!= -1)
    {
       printf("%d\n",rev);
    }
    else
        printf("Not Found!\n");

    return 0;
}


//递归法实现
#include <stdio.h>
#include <stdlib.h>

int bin_search(int * arr,int Count, int key, int low, int high)
{
    if(low > high)
        return -1;

    int mid = (low + high)/2;

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

       if(arr[mid] > key)
           return bin_search(arr, Count, key, low, mid-1);
       else if(arr[mid] < key)
           return bin_search(arr, Count, key, mid+1, high);
       else
           return mid;
    }

}

int main()
{
    int num[10] = {1,3,4,52,56,78,99,100,234,334};
    int rev ;
    rev = bin_search(num,10,334,0,10 - 1);//返回数组下标号
    if( rev!= -1)
    {
       printf("%d\n",rev);
    }
    else
        printf("Not Found!\n");

    return 0;
}


备份地址: 【迭代和递归分别实现二分查找