数据结构实验之查找六:顺序查找
Time Limit: 1000MS Memory limit: 65536K
题目描述
在一个给定的无序序列里,查找与给定关键字相同的元素,若存在则输出找到的元素在序列中的位序和需要进行的比较次数,不存在则输出"No",序列位序从1到n,要求查找从最后一个元素开始,序列中无重复元素。
输入
连续多组数据输入,每组输入数据第一行首先输入两个整数n(n <= 1000000)和k,n是数组长度,k是待查找的关键字,然后连续输入n个整数,数据间以空格间隔。
输出
若存在则输出元素在序列中的位序和比较次数,不存在则输出No。
示例输入
5 9 4 6 8 9 13 7 4 -1 3 2 5 4 6 9 20 90 4 6 8 9 13 17 51 52 54 59 62 66 76 78 80 85 88 17 20 21
示例输出
4 2 5 3 No
提示
顺序查找本身没有什么意思,看点在优化后,哨兵的使用
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[10000000];
int num;
/*int Se_Search(int k,int n)
{
int i = n;
for (; i>0; i--)
{
if (a[i]==k)
{
num++;
return i;
}
else
num++;
}
return -1;
}*/
//优化:将a[0]存放为要查找的关键字key,减少了数组越界的比较;
//如果查找表的长度很大,还是比简单的顺序查找快很多
int Se_Search(int k,int n)
{
int i;
a[0] = k;
for (i=n;a[i]!=a[0];i--)
num++;
return i;
}
int main()
{
int n,m;
int key;
while (~scanf ("%d %d",&n,&m))
{
num = 0;
for (int i=1; i<=n; i++)
scanf ("%d",&a[i]);
int f = Se_Search(m,n);
if (f==0)
printf ("No\n");
else printf ("%d %d\n",f,num+1);
}
return 0;
}
784

被折叠的 条评论
为什么被折叠?



