实验四 -1 实现顺序查找的算法

本文详细介绍了顺序查找算法的实现过程,包括实验目的、实验内容(如查找关键字5在给定数据序列中的位置),以及实验环境(Windows11和Codeblocks)。同时,对比了顺序查找与折半查找的时间复杂度和优缺点。
摘要由CSDN通过智能技术生成

 实现顺序查找的算法

目录

 实现顺序查找的算法

一、实验目的及要求

二、实验内容

三、实验设备与环境

四、实验设计方案

五、实验结果

六、附录源码


一、实验目的及要求

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;
}

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噗-噗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值