发布网友 发布时间:2024-10-23 22:57
共5个回答
热心网友 时间:2024-11-06 09:31
之前写过一个程序类似的,你可以用作参考:
题目:试编写一个程序完成:有15个数按从下到大的顺序存放在一个数组中.输入一个数,要求折半查找法找出该数是数组中第几个元素的值.如果该数不在数组中,输出“不在表。
=====下面是C代码,其中数组没有设计为录入,而是固定数组=====
//输出的序列是从0开始算的,也就是输出的是所在数组的索引
//注意数组中没有8
#include<stdio.h>
int main()
{
int a[]={1,2,3,4,5,6,7,9,10,11,12,13,14,15,16};
int n,first=0,end=14,mid;
scanf("%d",&n);
while(first<=end)//不要写成first<end,这样有可能会在最后一次二分(即first=end时)被忽略
{
mid=(first+end)/2;
if(a[mid]==n)
{
printf("your input number's index is %d(count from 0)",mid);
break;//忘记break会死循环
}
else if(n>a[mid])
{
first=mid+1;
}
else
{
end=mid-1;
}
}
if(first>end)
{
printf("your number is not in the array");
}
return 0;
}
热心网友 时间:2024-11-06 09:31
#include<stdio.h>
#define N 10
void main()
{
int a[N];
int num,i;
char ch='n';
printf("请输入一个数组:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("输出数组:\n");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
printf("请输入一个数\n");
scanf("%d",&num);
printf("开始查找\n");
for(i=0;i<N;i++)
if(num==a[i])
{
ch='y';
printf("%d 在数组的第 %d 位\n",num,i+1);
}
if(ch=='n')
printf("no found\n");
}
热心网友 时间:2024-11-06 09:31
#include<stdio.h>
#define N 10
void main()
{
int a[N];
int num,i;
char ch='n';
printf("请输入一个数组:\n");
for(i=0;i<N;i++)
scanf("%d",&a[i]);
printf("输出数组:\n");
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
printf("请输入一个数\n");
scanf("%d",&num);
printf("开始查找\n");
for(i=0;i<N;i++)
if(num==a[i])
{
ch='y';
printf("%d 在数组的第 %d 位\n",num,i+1);
}
if(ch=='n')
printf("no found\n");
}
热心网友 时间:2024-11-06 09:32
采用二分法查找啊,不知道你说的有序是升序,还是降序~~~针对不同方式,代码有些许差距
热心网友 时间:2024-11-06 09:38
确实难 帮写 私信