推荐于2017-09-16 · 知道合伙人教育行家
关注
展开全部
思路:依次遍历该数组,把每个数和需要判断的数进行比较如果相等则退出循环输出存在,如果遍历结束都找不到则不是其成员。
参考代码:
#include "stdio.h"
#define N 5
int main()
{
int a[N]={1,2,3,4,5},i,t;
scanf("%d",&t);
for(i=0;i<5;i++)
if(a[i]==t){
printf("%d是其成员!",t);
break;
}
if(i==5) printf("%d不是其成员!",t);
return 0;
}
/*
运行结果:
5
5是其成员!
*/
展开全部
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;} //重新求新的中间位置
}
}
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;} //重新求新的中间位置
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第一种:你要知道这个数组的大小,然后用for循环,遍历这个数组,比较这个数是否和数组中的值相等
例:
int main()
{
char a[10] = {0,1,2,3,4,5,6,7,8,9};
int b = 1;
for(int i=0;i<10;i++)
{
if(b == a[i])
{
cout<<"b是数组a中的成员"<<endl;
break;
}
if(i == 9)
cout<<"b不是数组a中的成员"<<endl;
}
}
第二种:你先将该数组排一下序,然后用折半查找,比对数组和该数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
额···
for(int i=0;i<arrsize;++i)
{
if(arr[i]==target)
{
answer = true;
}
}
answser = false;
这还需要思路- -#
另外如果是在排序好的数组中,则使用二分查找,效率更高,不过代码复杂我就不写了
for(int i=0;i<arrsize;++i)
{
if(arr[i]==target)
{
answer = true;
}
}
answser = false;
这还需要思路- -#
另外如果是在排序好的数组中,则使用二分查找,效率更高,不过代码复杂我就不写了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询