软基上机实验报告-查找与排序(基础题)
- 格式:docx
- 大小:37.57 KB
- 文档页数:3
ex5_1:查找——基本题
假设有序序列的数据元素为:
(3,10,13,17,40,43,50,70)
1)编写顺序查找函数
2)编写二分查找函数
3)在主程序中输入关键字(43和5),分别调用两种查找函数,输出结果。
试验程序代码:
Ex.1
#include<stdio.h>
#define N 8
int seq_search(int s[],int k)//顺序查找,返回序号
{
int i;
i=0;
while(s[i]!=k)
{
i++;
}
if(i<N)
{
printf("searching success");
return i;
}
else
{
printf("\tsearching failed\n");
return (-1);
}
}
int bin_search(int s[],int k)//二分查找,返回序号
{
int low,high,mid;
high=N-1;
low=0;
while(low<=high)
{
mid=(low+high)/2;
if(s[mid]==k)
{
printf("searching success");
return(mid);
}
else if(s[mid]<k)
{
low=mid+1;
}
else
high=mid-1;
}
printf("\tsearching failed");
return (-1);
}
void main()
{
int s[N]={3,10,13,17,40,43,50,70};
int k1=43,k2=5;
int t;
printf("using the seq_search :\n\t");
printf("k=43:\t");
t=seq_search(s,k1);
if(t!=-1)
printf("\t%d\n",s[t]);
printf("\tk=5:\t");
t=seq_search(s,k2);
if(t!=-1)
printf("\t%d\n\n",s[t]);
printf("using the bin_search :\n\t");
printf("k=43:\t");
t=bin_search(s,k1);
if(t!=-1)
printf("\t%d\n",s[t]);
printf("\tk=5:\t");
t=bin_search(s,k2);
if(t!=-1)
printf("\t%d\n",s[t]);
}
七、实验结果:
八,上机问题:
(1)在哈希表建立的时候,在编写输入循环函数时,条件为while(n>0), 却不能按照所想的输入名字。
解决问题:将while(n>0)改为while(n--),即添加一个循环条件,使
程序能在输入一个名字后输入下一个名字。
(2)在冒泡函数编写的时候,第二趟没有引入临时变量,导致后面的数与第一个完全相同。
解决办法:引入临时变量swap,swap=s[j];s[j]=s[j+1];s[j+1]=swap;
九、体会
查找运算依赖于查找表中各数据元素在计算机存储系统的组织与存储结构。
按照数据元素的组织,与存储方式决定了采用什么样的查找方法;反过来,为了提高查找方法的效率,又要求数据元素采用某些特殊的存储方式,于是就有了顺序查找,二分查找,分块查找等。