
2013-09-18
展开全部
可以用排序+折半查找 代码如下,编译软件DEV C++通过,要查找多少个数只要改一下宏定义就可以了另外要是再优化可以把排序的算法改一改#define A 10
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,a[A],j,t,b,min,mid,max,p[A],k;
p[0]=1; p[1]=2; p[2]=3; p[3]=4; p[4]=5; p[5]=6; p[6]=7; p[7]=8; p[8]=9; p[9]=10;
printf("请输入%d个数\n",A);
for(i=0;i<A;i++)
scanf("%d",&a[i]);
for(i=0;i<A;i++)
for(j=i+1;j<A;j++)
if(a[i]>a[j])
{ t=a[i];
k=p[i];
a[i]=a[j];
p[i]=p[j];
a[i]=t;
p[i]=k;
}
printf("请输入要查找的数字\n");
scanf("%d",&b);
min=0;
mid=A/2;
max=A-1;
for(i=0;i<A;i++)
{if(b==a[min]) {printf("您所输入的数为第%d个\n",p[min]); break;}
if(b==a[max]) {printf("您所输入的数为第%d个\n",p[max]); break;}
if(b==a[mid]) {printf("您所输入的数为第%d个\n",p[mid]); break;}
if(min>=max) {printf("ERROR 您所输入的数字%d不在此数组内"); break;}
if(b>a[mid])
{min=mid;<br> mid=(min+max)/2;}
if(b<a[mid])
{ max=mid;
mid=(max+min)/2;}
}
system("pause");
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,a[A],j,t,b,min,mid,max,p[A],k;
p[0]=1; p[1]=2; p[2]=3; p[3]=4; p[4]=5; p[5]=6; p[6]=7; p[7]=8; p[8]=9; p[9]=10;
printf("请输入%d个数\n",A);
for(i=0;i<A;i++)
scanf("%d",&a[i]);
for(i=0;i<A;i++)
for(j=i+1;j<A;j++)
if(a[i]>a[j])
{ t=a[i];
k=p[i];
a[i]=a[j];
p[i]=p[j];
a[i]=t;
p[i]=k;
}
printf("请输入要查找的数字\n");
scanf("%d",&b);
min=0;
mid=A/2;
max=A-1;
for(i=0;i<A;i++)
{if(b==a[min]) {printf("您所输入的数为第%d个\n",p[min]); break;}
if(b==a[max]) {printf("您所输入的数为第%d个\n",p[max]); break;}
if(b==a[mid]) {printf("您所输入的数为第%d个\n",p[mid]); break;}
if(min>=max) {printf("ERROR 您所输入的数字%d不在此数组内"); break;}
if(b>a[mid])
{min=mid;<br> mid=(min+max)/2;}
if(b<a[mid])
{ max=mid;
mid=(max+min)/2;}
}
system("pause");
}
2013-09-18
展开全部
对于无序的你只能从尾(倔一点,呵呵)开始找了,要不就像上面那老兄说,先排序好再查找,对于数据量大的,那样效率显著!而且排好序查找的方法很多,如折半,FIBONACCI查找(利用数组1,1,2,3,,5,8...的特殊性,你可以上下百度见识下人家的思路), 相信你能懂哦
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-18
展开全部
无序就用顺序查找吧!0(n) 可接受的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先排序后折半查找起码的复杂度是O((N+k)logN)
如果要是对序列要进行非常数次查找这样做是值得的否则时间复杂度是O(kN)
如果要是只查找常数次则不如顺序查找
O(N)
如果要是对序列要进行非常数次查找这样做是值得的否则时间复杂度是O(kN)
如果要是只查找常数次则不如顺序查找
O(N)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询