折半查找(C语言)

题目:有15个数据由小到大顺序存放在一个数组中,输入一个数,要求使用折半查找法查找该数是数组中的第几个元素;如果该数不存在,则输出,没有此数

/**
有15个数据由小到大顺序存放在一个数组中,输入一个数,要求使用折半查找法查找该数是数组中的第几个元素;如果该数不存在,则输出,没有此数 
*/
#include<stdio.h>
#define N 15

int main()
{
	void input(int num[]);//函数声明 
	void search(int num[],int n);//函数声明 
	int num[N];//数组输入15个数 
	int n;//要查找的数字 
	char c;//用于输入字符 
	int flag=1;//是否继续输入数进行查找
	input(num); 
	while(flag)
	{
		printf("Please input the number of searching:");
		scanf("%d",&n);
		search(num,n);
		printf("Continue or not(Y/N)?");
		getchar();//吸收回车符 
		scanf("%c",&c);
		if(c == 'n' ||c == 'N')
		{
			flag=0;
		}
	}
	return 0;
 } 
 
void input(int num[])
{
	int i=1;//循环变量 
	printf("Please input the numbers:\n");
	scanf("%d",&num[0]);//输入第一个数
	while(i<N)//输入剩下的数 
	{
		scanf("%d",&num[i]); 
		if(num[i-1]<num[i])//判断输入是否 符合从小到大的条件 
		{
			i++;
		}
		else
		{
			printf("Please input the numbers again:\n");
		}
	 }
	 printf("\n");
	 for(i=0;i<N;i++)//输出15个数 
	 {
	 	printf("%5d",num[i]);
	 }
	 printf("\n"); 
}/*input()*/

void search(int num[],int n)
{
	int sign=0;// 是否找到,找到为1 
	int top=0;//折半查找的开始位置 
	int bott=N-1;//折半查找的末位置 
	int mid=(top+bott)/2;//折半查找的中间位置 
	while((sign == 0) && (top <=bott))//折半查找 
	{
		if(n == num[mid])//找到 
	    {
		printf("Has fund %d,the posision is:%d",n,mid+1);
		sign=1;
		}
		else if(n>num[mid])//如果n大于中间位置的数,向后查找 
		{
		top=mid+1;//开始位置变,末位置不变 
		mid=(top+bott)/2;//中间位置变 
		}
		else//如果n小于中间位置的数,向前查找 
		{
		bott=mid-1;//开始位置不变,末位置变
		mid=(top+bott)/2;
		}
	} 
	if(sign == 0)
	{
		printf("Can not find!");
	} 
}/*search()*/

 

新手还请大家多多指教!

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值