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

如题所述

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;} //重新求新的中间位置
}

}
温馨提示:答案为网友推荐,仅供参考
相似回答