题目:有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()*/
新手还请大家多多指教!