折半查找(二分):
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 100
typedef struct
{
int key;
} ElemType;
typedef struct
{
ElemType elem[MAX_NUM];
int length;
} SSTable;
int s(SSTable st,int key)
{
int i;
int ans=0;
int l=1,r=st.length,mid=0;
while (l<=r)
{
mid=(l+r)/2;
ans++;
if (key>st.elem[mid].key)
l=mid+1;
else if (key<st.elem[mid].key)
r=mid-1;
else
{
printf("查找次数:%d\n",ans);
return mid;
}
}
printf("查找次数:%d\n",ans);
return 0;
}
int main()
{
int n,i,t;
SSTable st;
scanf("%d",&n);
st.length=n;
for (i=1; i<=n; i++)
scanf("%d",&st.elem[i].key);
scanf("%d",&t);
t=s(st,t);
if (t==0)
printf("不存在要查找的数据\n");
else printf("查找数据的位置:%d\n",t);
return 0;
}
顺序查找:
#include <stdio.h>
#include <stdlib.h>
#define MAX_NUM 100
typedef struct
{
int key;
} ElemType;
typedef struct
{
ElemType elem[MAX_NUM];
int length;
} SSTable;
int s(SSTable st,int key)
{
int i;
int ans=0;
st.elem[0].key=key;
for (i=st.length; i>=1; i--)
{
ans++;
if (st.elem[i].key==key)
{
printf("查找次数:%d\n",ans);
return i;
}
}
printf("查找次数:%d\n",st.length);
return 0;
}
int main()
{
int n,i,t;
SSTable st;
scanf("%d",&n); //输入数据的个数
st.length=n;
for (i=1; i<=n; i++)
scanf("%d",&st.elem[i].key);
scanf("%d",&t);
t=s(st,t);
if (t==0)
printf("不存在要查找的数据\n");
else printf("查找数据的位置:%d\n",t);
return 0;
}