二分查找 普通查找 和递归
查找关键字符:二分(折半)查找法 (缩小区域)
前题:查找序列是有序(降/升序)
假定:升序
1、每次取序列中间元素进行比较
2、如果key>mid,说明查找值在中间元素的右侧,
如果key<mid,说明查找值在中间元素的左侧,
key==mid,说明查找成功
3、如果查找不成功,则再重复1,2步骤,直到查找成功或失败
我们以9为例子
比如:1,2,3,4,5,6,7,8,9,10
L mid r 第一次
L M R 第二次
L M R 第三次
代码程序
*************************************************************
#include<stdio.h>
void main()
{
int buf[10]={1,2,3,4,5,6,7,8,9,10};
int left=0,right=10;
int mid;
int key=9;
while(left<=right)
{
mid=(left+right)/2;
if(key<buf[mid])
{
right=mid-1;
printf("在左侧\n");
}
if(key>buf[mid])
{
left=mid+1;
printf("在右侧\n");
}
else if(key==buf[mid])
{
printf("成功找出%d\n",mid+1);
break;
}
}
}
************************************************************************
--------------------------------------------------------------------------------
递归:就是自己调用自己,每次都是调用这个函数实现二分查找
int fun(int key,int buf[],int left,int right)
{
int mid;
mid=(left+right)/2;
if(key<buf[mid])
{
return fun(key,buf,mid-1,left);
printf("在左侧\n");
}
if(key>buf[mid])
{
return fun(key,buf,right,mid+1);
printf("在右侧\n");
}
else if(key==buf[mid])
{
printf("成功找出%d\n",mid+1);
}
else
return -1;
}
----------------------------------------------------------------------------------