折中法查找 c语言,c语言的折中查找法的算法?

#include

#define N 21

void main(void)

{

int a[N];

int i,n,num;

int top,bottom,mid;

int flag=1; //如果在表列中找到数字,则值为1,否则为0

int loc=-1;//要查找的数在表列中的位置,如果loca=-1表示表列中没有这个数;如果有这个数,则它的值为所在的位置

printf("你想在多少个数中进行折半查找,请输入(1--20):");

scanf("%d",&n);

while(n<1 || n>20)

{

printf("你输入的数不正确,请重新输入。\n");

printf("你想在多少个数中进行折半查找,请输入(1--20):");

scanf("%d",&n);

}

printf("请你输入一个整数 a[1]:");

scanf("%d",&a[1]);

i=2;

while(i<=n) //输入从小到大的表列

{

printf("请你输入一个整数 a[%d]:",i);

scanf("%d",&a[i]);

if(a[i] > a[i-1])

i++;

else

printf("你输入的数不满足要求,请重新输入。\n");

}

//输出表列

printf("\n输出表列\n");

for(i=1; i<=n; i++)

{

printf("%6d",a[i]);

}

printf("\n");

printf("请你输入要查找的数:");

scanf("%d",&num);

flag=1; //假设输入的数在表列中

top=n;

bottom=1;

mid=(top+bottom)/2;

while(flag)

{

printf("top=%d, bottom=%d, mid=%d, a[%d]=%d\n",top,bottom,mid,mid,a[mid]);

if( (num>a[top]) || (numa[top] 或者 num

{

loc=-1;

flag=0;

}

else if(a[mid]==num) //如果num 等于找到的数

{

loc=mid;

printf("找到数 %6d 的位置%2d\n",num,loc);

break;

}

else if(a[mid]>num) //若 a[mid]>num,则num 一定在 a[bottom]和a[mid-1]范围之内

{

top=mid-1;

mid=(top+bottom)/2;

}

else if(a[mid]

{

bottom=mid+1;

mid=(top+bottom)/2;

}

}

if(loc==-1)

{

printf("%d 这个数在表列中没有找到。\n",num);

}

printf("折半查找结束:");

scanf("%d",&n);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值