gzpk

有序表的折半查找

非递归实现

代码
#include <stdio.h>
int search(int num[],int n,int key)
{
    
int low=0;
    
int high =n-1;
    
int mid=0;
    
while(low<=high)
    {
        mid 
= (low+high)/2;
        
if(num[mid]==key)return mid;
        
else if(num[mid]<key)
        {
            low
=mid+1;
        }
        
else 
        {
            high 
= mid-1;
        }
    }
    
return -1;
}
int main()
{
        
int a;
        scanf(
"%d",a);
    
int num[10]={0,1,2,3,4,5,6,7,8,9};
    printf(
"%d\n",search(num,10,a));
    
return 0;
}

 

 递归实现

代码
#include <stdio.h>
int search(int num[],int low,int high,int key)
{
    
if(low==high&&num[low]!=key)
    {
        
return -1;
    }
    
int mid=0;
    mid 
= (low+high)/2;
    
if(num[mid]==key)
    {
        
return mid;
    }
    
else if(num[mid]<key)
    {
        low 
=mid+1;
    }
    
else
    {
        high 
=mid-1;
    }
    search(num,low,high,key);
}
int main()
{
    
int num[10]={0,1,2,3,4,5,6,7,8,9};
    printf(
"%d\n",search(num,0,9,0));

    
return 0;
}

 

 

posted on 2010-06-24 18:15  gzpk  阅读(326)  评论(0编辑  收藏  举报

导航