问:如何进行顺序查找、二分查找
答:c语言(Dev C++)
目录
一、顺序查找
利用关键字R[].key进行从后查找
利用while和break进行简单的循环查找
#define N 10
typedef struct //定义结构体
{ int key; //定义键值
char other; //其它类型
} RecType;
RecType R[N+1];
//顺序查找
int seqSearch(RecType R[],int k)
{
int i;
R[0].key=k; //监视哨
i=N; //从后查找
while(R[i].key!=k)i--; //若不等于,则i--查找下一个
return i; //返回i值
}
int main()
{
int i,k;
char ch;
printf("输入10个数:");
for(i=1;i<=N;i++)
{scanf("%d",&R[i].key);} //scanf输入
printf("检查:");
for(i=1;i<=N;i++)
{printf(" %d",R[i].key);} //检查输入
while(1)
{ printf("\n请输入要查找的:");
scanf("%d",&i);
k=seqSearch(R,i);
if(k==0)
printf("没有找到"); //若k=0,则未找到
else
printf("%d的下标是:%d",i,k);
printf("\n 是否继续?(y/n)"); //是否继续查找while与break
getchar();
scanf("%c",&ch);
if(ch=='n'||ch=='N') //若n,则break中止循环
break;
}
}
二、二分查找
利用关键字R[].key进行从后查找
利用while和break进行简单的循环查找
定义low,high,mid
#include<stdio.h>
#define N 10
typedef struct //定义结构体
{ int key; //定义键值
char other; //其它类型
} RecType;
RecType R[N+1]; //11
void xz(RecType R[])
{
RecType x;
int i,j,k;
for(i=1;i<N;i++) //进行N-1遍选择排序
{
k=i;
for(j=i+1;j<N+1;j++)
if(R[j].key<R[k].key)k=j; //哨兵替换
if(k!=i)
{ x=R[i];R[i]=R[k];R[k]=x;}
}
}
int bs(RecType R[],int k) //要求:有序表void xz(RecType R[])
{
int low,high,mid;
low=1;high=N; //设置初始空间1~N
while(low<=high) //查找空间非空
{ mid=(low+high)/2; //取中间
if(k==R[mid].key) return mid; //返回mid
else if(k<R[mid].key) high=mid-1; //前半区间
else low=mid+1; //后半区间
}
}
int main()
{
int i,k;
char ch;
printf("输入10个数:");
for(i=1;i<=N;i++)
{scanf("%d",&R[i].key);} //输入
xz(R); //xz选择排序子函数
printf("检查:");
for(i=1;i<=N;i++)
{printf(" %d",R[i].key);} //检查输入
while(1)
{ printf("\n请输入要查找的:");
scanf("%d",&i);
k=bs(R,i);
if(k==0)
printf("没有找到");
else
printf("%d的下标是:%d",i,k); //输出下标
printf("\n 是否继续?(y/n)");
getchar();
scanf("%c",&ch);
if(ch=='n'||ch=='N') //若输入n,则break退出循环
break;
}
}
------------分割线---------------
菜鸟古古 2021-6-9 11:35:22
菜鸟古古 2022-1-4 10:45:15