#include<stdio.h>
void tamp(int *x,int *y)
{
int t=*x;
*x=*y;
*y=t;
}
void up(int a[],int len)
{
for(int i=0;i<len-1;i++)
for(int j=i+1;j<len;j++)
if(a[i]>a[j])
tamp(&a[i],&a[j]);
}
int search(int key,int a[],int len)
{
int ret=-1;
int left=0;
int right=len-1;
while(left<=right)//left>right时说明number所在的范围为负数即没有number在此数据
{
int mid=(left+right)/2;
if(a[mid]==key)//当范围缩小到0的时候min就是key
{
ret=mid;
break;
}else if(a[mid]>key)
{
right=mid-1;//数据在mid的左侧舍去右侧缩小范围
}else
{
left=mid+1;//数据在mid的右侧舍去左侧缩小范围
}
}
return ret;
}
int main()
{
int a[]={1,2,3,4,5,6,7,89,120,99,45,78,9,45,123};
up(a,sizeof(a)/sizeof(a[0]));//二分法必须排序后在搜索
for(int j=0;j<sizeof(a)/sizeof(a[0]);j++)
printf("%d ",a[j]);
int x;
printf("please input you want to search number:");
scanf("%d",&x);
int r=search(x,a,sizeof(a)/sizeof(a[0]));
if(r==-1) printf("Sorry,don't have the number you want to search");
else printf("The address in %d",r);
}//搜索次数为log(2(n))大大提高了效率
二分法查找笔记
最新推荐文章于 2024-07-12 18:56:03 发布