实现顺序查找的算法
目录
一、实验目的及要求
1.掌握顺序查找和折半查找的基本原理和实现方法。
2.理解这两种查找算法的时间复杂度,并比较其优缺点。
3.能够根据给定的数据序列,使用这两种算法查找关键字,并输出与关键字比较的元素以及关键字的位置。
4.通过实验加深对数据结构和算法在实际问题中的应用的理解。
二、实验内容
编写程序实现顺序查找的算法,并在此基础上分别使用这种查找算法设计算法对数据序列{3,6,2,10,1,8,5,7,4,9},完成以下操作:
查找关键字5的过程,要求输出与关键字5比较的元素以及输出关键字5的位置。
三、实验设备与环境
Windows11
codeblocks
四、实验设计方案
(一)实验步骤:
1.编写顺序查找算法的实现代码
2..使用顺序查找算法对给定数据序列进行查找关键字5的操作,并输出与关键字5比较的元素以及关键字5的位置。
3.运行并测试,观察查找结果。
(二)设计思想:
顺序查找算法:从数据序列的第一个元素开始,逐个比较每个元素与关键字的大小,直到找到相等的元素或遍历完整个序列。该算法的时间复杂度为O(n),其中n为数据序列的长度。
(三)算法描述或开发流程:
a. 从数据序列的第一个元素开始。
b. 依次比较当前元素与关键字的大小。
c. 如果相等,则输出当前位置。
d. 如果不相等且当前元素小于关键字,则在右半部分继续查找。
e. 如果不相等且当前元素大于关键字,则在左半部分继续查找。
f. 重复步骤b-e,直到找到相等的元素或遍历完整个序列。
五、实验结果
六、附录源码
/ 顺序查找
#include "seqlist.cpp"
using namespace std; // 包含顺序表基本运算算法
int SeqSearch(RecType R[], int n, KeyType k) // 顺序查找算法
{
int i = 0;
while (i < n && R[i].key != k)
{
printf("%d ", R[i].key);
i++; // 从表头往后找
}
if (i >= n)
return 0;
else
{
printf("%d", R[i].key);
return i + 1;
}
}
// 请大家补充折半查找
int binary_serch(RecType R[], int n, KeyType k)
{
int l = -1, r = n - 1;
while (l < r)
{
int mid = l + r + 1 >> 1;
if (R[mid].key >= k)
{
l = mid;
}
else
r = mid - 1;
}
if (l == -1)
return -1;
else
return l + 1;
}
int main()
{
RecType R[MAXL];
int n = 10, i;
KeyType k = 5;
int a[] = {3, 6, 2, 10, 1, 8, 5, 7, 4, 9};
CreateList(R, a, n); // 建立顺序表
printf("关键字序列:");
DispList(R, n);
printf("查找%d所比较的关键字:\n\t", k);
if ((i = SeqSearch(R, n, k)) != 0)
printf("\n元素%d的位置是%d\n", k, i);
else
printf("\n元素%d不在表中\n", k);
k = 5;
for (int i = 1; i <= n; i++)
{
a[i - 1] = i;
}
CreateList(R, a, n);
if (binary_serch(R, n, k) != -1)
printf("\n元素%d的位置是%d\n", k, i);
else
printf("\n元素%d不在表中\n", k);
return 1;
}