折半查找实验 (数据结构)

这篇具有很好参考价值的文章主要介绍了折半查找实验 (数据结构)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实验目的

掌握折半查找算法的基本思想

掌握折半查找算法的实现方法

掌握折半查找的时间性能

掌握折半查找类的定义和使用

二、实验要求

熟悉C++语言编程

了解折半查找的原理

了解折半查找类的定义、应用

三、实验内容

1、问题描述

在一个有序序列中,折半查找一个关键字

返回查找是否成功,如果成功,输出关键字所在的位置和查找次数。

2、折半查找算法

1.n个从小到大存放在有序顺序表ST中,k为给定值

2.设low、high指向待查元素所在区间的下界、上界,即low=1,high=n

3.设mid指向待查区间的中点,即mid=(low+high)/2

4.让k与mid指向的记录比较

若k=ST[mid].key,查找成功,结束

若k<ST[mid].key,则high=mid-1    [上半区间]

若k>ST[mid].key,则low=mid+1    [下半区间]

5.重复3,4操作,直至low>high时,查找失败。

举例:

折半查找实验 (数据结构)

3、输入

第一行:测试次数

每个样本分两行:

第一行:第一个数字n表示样本数目,其后跟n个样本;

第二行:查找的关键字的值。

4、输入样本

2

5 2 3 4 5 7

6 1 2 3 4 6 8

7

5、输出

查找是否成功(1-表示成功,0表示不成功)

所在位置(0-表示不成功)

查找次数

6、输出样本

1 3 1

0 0 3

四、实验步骤

1、折半查找变量的定义

2、生成顺序有序表函数

3、折半查找函数

4、主程序

五、详细代码文章来源地址https://www.toymoban.com/news/detail-480962.html

#include<stdio.h>

/*折半查找实验*/



int BinSuccess;  // 查找是否成功(1-成功,0-不成功)

int BinPos;      //  查找位置(0表示不成功)

int BinCount;    //  查找次数   

int BinList[32]; //     有序表

int BinListLen;  //       有序表长度



int BinSearchKey(int Key);

void CreateSequence(int *r, int n);



int main()

{

    int r[32], i, j, Key, TestNum, SampleNum;

    printf(" 输入测试次数");

    scanf("%d", &TestNum);

    for(i = 0; i < TestNum; i++)

    {

        printf("输入样本数目");

        scanf("%d", &SampleNum);

        printf("输入样本数据: ");

        for(j = 1; j <= SampleNum; j++)

            scanf("%d", &r[j]);

        CreateSequence(r, SampleNum);

        printf("输入1个查找数据");

        scanf("%d", &Key);

        BinSearchKey(Key);

        printf("%d %d %d\n", BinSuccess, BinPos, BinCount);

    }

    return 0;

}

void CreateSequence(int *r, int n)

{

    int i, j, temp;

    BinListLen = n;

for(i = 1; i < n; i++)

//利用直接插入排序将顺序表元素排成升序序列

    {

        if(r[i+1] < r[i])

        {

            temp = r[i+1];

            for(j = i; j >= 1; j -= 1)

                if(temp<r[j])

                    r[j+1] = r[j];

                else break;

            r[j+1] = temp;

        }

    }

    for(i = 1; i <= n; i++)

        BinList[i] = r[i];// 数据放到有序顺序表中   

}

int BinSearchKey(int Key)

{

    int Low, Mid = 0, High;

    Low = 1;//low指向待查元素所在区间的下界

    High = BinListLen;//high指向待查元素所在区间的上界

    BinSuccess = 0;

    BinPos = 0;

    BinCount = 0;

    while(Low <= High)

    {

     BinCount++;// 执行循环查找的记数   

        Mid =(High + Low)/2;

        if(Key == BinList[Mid])

        {

            BinSuccess = 1;// 查找成功

BinPos = Mid;

            break;

        }              

        if(Key > BinList[Mid])// 关键字大于折半查找所取的中间数

        {

            Low = Mid + 1;

        }

        if(Key < BinList[Mid])// 关键字小于折半查找所取的中间数

        {

            High = Mid - 1;

        }

       

    }    

    return BinCount;// 返回查找次数

}



 

到了这里,关于折半查找实验 (数据结构)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《数据结构》实验报告七:查找

    1、掌握 查找表 、 动态查找表 、 静态查找表 和 平均查找长度 的概念。 2、掌握线性表中 顺序查找 和 折半查找 的方法。 3、学会 哈希函数 的构造方法, 处理冲突 的机制以及 哈希表的查找 。 说明以下概念 1、顺序查找:         顺序查找又叫 线性查找 ,是最基本的查

    2024年02月06日
    浏览(43)
  • 数据结构实验报告(四)——查找和排序算法

    1. 掌握顺序查找技术和拆半查找技术以及部分排序算法的设计思想; 2. 掌握查找、部分排序算法的实现与执行过程。 查找算法 1.顺序查找: 从数组第一个元素开始逐个比较,找到后返回相应下标。 2.折半查找: 从数组中间开始比较,如果需查找值比中间值大,则在中间值右

    2024年02月07日
    浏览(45)
  • 数据结构——折半插入排序

    目录 ​一、算法介绍 1.算法思想 2.算法流程 二、算法实现 1.代码实现 2.测试用例及结果 三、性能分析 1.时间复杂度 2.空间复杂度 折半插入排序的思想是借用了折半查找的思路,通过在已经有序的序列(默认序列第一个元素为有序序列)中利用二分查找快速定位插入位置,这

    2024年02月12日
    浏览(84)
  • 数据结构 ----- 折半插入排序

    ​​​​ ​ 折半插入排序 ​ 活动地址:CSDN21天学习挑战赛 一、折半插入排序 1.1 概念 折半插入排序 (Binary Insertion Sort)是对插入排序算法的一种改进。所谓插入排序,就是不断的依次将元素插入前面已排好序的序列中。 1.2 查找过程 折半插入排序的基本思想跟直接插入排

    2024年02月09日
    浏览(39)
  • 合肥工业大学 宣城校区 数据结构与算法实验 队列、二叉树、查找和排序

    1.实验目标 熟练掌握队列的顺序存储结构和链式存储结构。 熟练掌握队列的有关算法设计,并在循环顺序队列和链队列上实现。 根据具体给定的需求,合理设计并实现相关结构和算法。 2.实验内容和要求 循环顺序队列的实验要求 循环顺序队列结构和运算定义,算法的实现以

    2024年02月11日
    浏览(49)
  • 一、课程设计目的与任务《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以

    一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应

    2024年02月21日
    浏览(71)
  • 数据结构之索引查找(分块查找)

    活动地址:CSDN21天学习挑战赛   作者简介:大家好我是小唐同学(๑؂๑),为梦想而奋斗的小唐,让我们一起加油!!! 个人主页: 小唐同学(๑؂๑)的博客主页 系列专栏:数据结构 博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已

    2024年02月02日
    浏览(53)
  • 数据结构算法--1 顺序查找二分查找

    顺序查找时间复杂度为O(n) 我们可以借助Python中的函数enumerate,通过enumerate遍历列表返回其索引和值 也可以通过列表长度依次遍历: 但是二分查找时间复杂度为O(logn):

    2024年02月12日
    浏览(54)
  • 数据结构10 -查找_树表查找

    二叉搜索树是有数值的了, 二叉搜索树是一个有序树 。 若它的左子树不空,则左子树上所有结点的值均 小于 它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均 大于 它的根结点的值; 它的左、右子树也分别为二叉排序树 下面这两棵树都是搜索树 bstree.c(二

    2024年02月14日
    浏览(39)
  • 数据结构--》掌握数据结构中的排序算法

            当我们面对海量数据时,如何高效地将其排序是数据结构领域中一个重要的问题。排序算法作为其中的关键部分,扮演着至关重要的角色。         无论你是初学者还是进阶者,本文将为你提供简单易懂、实用可行的知识点,帮助你更好地掌握排序算法在数据

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包