判断一个数是否是数组中的成员,用C语言如何编程?

 我来答
qscorpius_fly
推荐于2019-09-26 · TA获得超过1861个赞
知道小有建树答主
回答量:811
采纳率:80%
帮助的人:318万
展开全部
findelem()就是查找函数,查找输入的参数x在数组array的位置,函数返回元素在array中的单元下标
sort()是排序函数,用冒泡排序的方法将数组array从小到大排序
算法思路:
(1)输入数组
(2)对数组进行排序
(3)调用findelem()进行查找,若查找元素比数组单元的值大则判断下一单元,直到x大于等于当前数组单元的值,则该单元的下标就是函数的返回值
#include<stdio.h>
#define LEN 5
int findelem(int elem);
int main()
{
int i;
int x;
int pos;
int array[LEN]={0};
printf("请输入数组:");
for(i=0;i<=LEN-1;i++)
scanf("%d",&array[i]);
printf("请输入要查找的数:");
scanf("%d",&x);
sort(array);
pos=findelem(x,array);
printf("%d在数组的位置为:%d\n",x,pos);
return 0;
}

void sort(int *parray)
{
int i,j,tmp;
for(i=1;i<=LEN-1;i++)
for(j=0;j<=LEN-i-1;j++)
{
if(parray[j]>parray[j+1])
{
tmp=parray[j];
parray[j]=parray[j+1];
parray[j+1]=tmp;
}
}
}

int findelem(int elem, int *parray)
{
int i;
for(i=0;i<=LEN-1;i++)
{
if(parray[i]>=elem)
{
return(i);
break;
}
}
if(i>=LEN) return(i);
}
和其他人的一样,查找函数可以用二分查找进行优化,下面是二分查找算法写的函数,没有实际运行过,如果有问题欢迎追问
int findelem(int elem, int *parray)
{
int mid,upper,lower;

upper=LEN;

lower=1;

mid=(upper+lower)/2;

while(1)

{
if(elem==parray[mid]) return (mid);

if(elem==parray[mid-1]) return (mid-1);

if(elem>parray[mid-1] && elem<parray[mid]) return (mid);

if(elem<parray[mid-1]) //若elem比parray[mid-1],则elem必定在数组mid-1的前面部分
{upper=mid-2; //重新设置查找的上届
mid=(upper+lower)/2;} //重新求新的中间位置

if(elem>parray[mid]) //若elem比parray[mid],则elem必定在数组mid的后面部分
{lower=mid+1; /重新设置查找的下届
mid=(upper+lower)/2;} //重新求新的中间位置
}

}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式