查找算法实现

实现顺序查找的算法 /** *    实验题目: *        实现顺序查找的算法 *    实验目的: *        领会顺序查找的过程和算法设计 *    实验内容: *        设计程序,输出在顺序表(3, 6, 2, 10, 1, 8, 5, 7, 4, 9)中采用 *    顺序查找方法查找关键字5的过程 * */ #include <stdio.h> #define MAX_... 阅读详情

1. 折半查找

使用折半查找的前提是元素已经排序。
代码实现:先定义接口Search

package org.util.search;

/**
 * 查找
 * @author Weibing Long
 * @since 2018.04.13
 */
public interface Search {
    boolean search(int[] x, int key);
}

然后实现方法

package org.util.search;

/**
 * 折半查找,使用折半查找的前提是元素已经排序
 * @author Weibing Long
 * @since 2018.04.13
 */
public class BinarySearch implements Search {

    public static void main(String[] args) {
        BinarySearch binarySearch = new BinarySearch();
        int[] x = new int[] {
                2, 3, 5, 7, 10, 11, 18, 19, 23
        };
        boolean result = binarySearch.search(x, 3);
        System.out.println(result);
    }

    @Override
    public boolean search(int[] x, int key) {
        if (x == null)
            throw new NullPointerException("数组对象不能为空");
        if (x.length == 1 && key == x[0])
            return true;
        int left = 0;
        int right = x.length - 1;
        int middle = 0;
        while (left <= right) {
            long sum = right + left;
            middle = (int)(sum / 2);
            if (key > x[middle])
                left = middle + 1;
            else if (key < x[middle])
                right = middle - 1;
            else
                return true;
        }
        return false;
    }
}

注意:应该考虑到int溢出的情况。当求数组中间位置时,如果数组长度很大,则(right + left)/ 2中的right + left容易溢出,所以先将和放入long类型的sum中,然后再除2后转换为int类型,因为中间索引一定在int所允许的范围内。
具体代码体现在

long sum = right + left;
middle = (int)(sum / 2);
各种查找算法实现 1、实验内容: (1)顺序查找:使用数组或链表结构。用随机函数生成16个不重复的字母(’a’~’z’),键盘输入待查找的字母,返回查找成功与否,若成功则返回该字母所在的位置(序号),并计算比较次数。 (2)折半查找:用数组实现,查找前元素先排序。计算比较次数。分别用查找成功、不成功进行测试。 2、实现代码: #include<iostream> #include<time.h&g... 阅读详情

相关推荐

查找算法代码C++——包括顺序、二分、BST、哈希

用C++写的最全的查找算法,顺序查找,二分查找,BST查找,哈希查找,可用于学习查找算法

四种查找算法代码实现

思想:基于二分查找算法,将查找点的选择改进为自适应选择,提高查找效率。对于分布比较均匀的有序序列查找比较快。思想:运用黄金比例的概念在有序数列中选择查找点进行查找,提高查找效率。为 fibnoacci 数列,当。特点:递归,是二分查找的升级。特点:不需要对序列进行排序。特点:针对有序序列,递归。特点:是二分查找的升级。

YOU_are_666的博客 406

Python实战:ERA5风场数据区域提取与风向合成可视化全流程解析

本文详细解析了使用Python处理ERA5风场数据的完整流程,包括NC文件读取、特定区域数据提取、u/v分量合成风向风速的计算,以及利用Matplotlib进行风场时空演变可视化。内容涵盖从环境搭建、数据获取到高级绘图与性能优化的实战经验,为气象数据分析、风能评估及气候研究提供了一套清晰、可操作的技术指南。

swift5iosmith的博客 302

查找算法的分析与实现

▲查找的介绍: 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找、插值查找以及斐波那契查找都可以归为一类——插值查找。插值查找和斐波那契查找是在二分查找的基础上的优化查找算法。树表查找和哈希查找会在后续的博文中进行详细介绍。 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。 查找算法分类: 1)静态查找和动态查找;     注:静态或者

weixin_62226325的博客 876

一文学会Cadence Sigrity PDN仿真——硬件新手小白都能看懂的保姆级教程

电源完整性的仿真,实际上是在仿真以及优化系统中的等效串联电阻。知道了仿真以及优化的目标之后,接下来就是要弄明白这个串联电阻从哪儿来以及怎么优化。整个系统中的串联电阻实际上由三部分组成:没有相位的阻抗,有相位的容抗和感抗,得益于相位,在某个特定的频点,容抗和感抗会大小相等,相位相反而相互抵消,这时候整个系统中就剩下了阻抗,所以整个系统的串联电阻达到了一个最低值,这种现象就是----谐振。当系统处于谐振点时候,整个系统会有一个最小的串联电阻,所以第一个优化电阻的手段就是让谐振来的更频繁一点。

学习帮的博客 2万+

QT5.14.2+VS2019安装配置教程Windows

QT5.14.2+VS2019安装使用教程Windows前言一. QT的下载与安装1. QT的下载2. QT的安装二. 配置Visual Studio编译器环境1. 扩展工具下载2. 扩展工具配置 前言 由于Visual Studio 的功能强大,很多开发人员比较熟悉使用,所以可以通过将QT配置到Visual Studio中进行开发。 一. QT的下载与安装 1. QT的下载 QT5.14.2下载地址 2. QT的安装 断开网络!断开网络!!断开网络!!! 安装QT之前,需要断开电脑的网络连接,这样就

Zander0的博客 7248

实验八 查找算法的实现

(1)验证并设计顺序表的查找(顺序查找、折半查找)算法 (2)验证二叉排序树上的查找(创建、查找、插入)算法 (3)验证Hash表查找(Hash函数定义、建立,查找,插入)算法

m0_51308557的博客 4438

嵌入式开源项目哪里找

对比产生的伤害是经验思考积累下的差距,知道自己不知道什么然后前进去追寻。

quanquanxiaobu的博客 3944

数据结构实验课:实验七、查找算法的实现

实验七、查找算法的实现 一、实验目的 掌握顺序和二分查找算法的基本思想及其实现方法。 二、实验要求 问题描述:对给定的任意数组(设其长度为n),分别用顺序和二分查找方法在此数组中查找与给定值k相等的元素。 顺序查找基本思想:从查找表的一端开始,逐个将记录的关键字值和给定值进行比较,如果某个记录的关键字值和给定值相等,则称查找成功;否则,说明查找表中不存在关键字值为给定值的记录,则称查找失败。 二分查找基本思想:先取查找表的中间位置的关键字值与给定关键字值作比较,若它们的值相等,则查找成功;如果给定值比该记录

listboy的博客 1万+

【项目实战】Java9的新特性模块化(Module)

Java 9引入了模块化系统,称为"Java Platform Module System"(JPMS)这个系统允许将Java程序分成模块,每个模块都有自己的规范,可以明确地声明它依赖于哪些其他模块,并且只能访问被其所依赖的模块暴露的API。这样可以模块化就是增加了更高级别的聚合,是Package的封装体。Package是一些类路径名字的约定,而模块是一个或多个Package组成的封装体。

奶爸的编程之路,也就一周冷个三天 1896

【数据集】全球预报系统GFS概述:数据下载及处理

【数据集】全球预报系统GFS概述:数据下载及处理

WW、forever的博客 5751

查找算法概述与实现

查找算法分为静态查找和动态查找,其中,静态查找包括:顺序查找、折半查找、分块查找;动态查找包括:二叉排序树和平衡二叉树。把待查找的key放到哨兵的位置,哨兵一般是下标为0的位置,在依次从后往前把表中的元素与key作比较,如果返回值为0,则查找失败,如果返回值为元素的下标值i(i是不等于0的),则查找成功。 哨兵的作用是加快执行速度,免去了每次在查找结束后都要判断查找位置是否越界的步骤。首先将给定的key值与表中的中间位置的元素作比较,若相等,则返回该元素的存储位置;若不相等,则表示所需查找的元素只能在中间元

生活需要深度 1481

IDEA出现闪退或打不开的解决方法

本身项目比较大,为了打开这个软件,可调节IDEA中安装的bin目录下有个。打开IDEA的时候过一会便闪退,可以再IDEA的右下角看到如下提示。(如果没有该提示,软件右下角也会有个红色感叹号,点开查看原因即可)闪退的多数原因大致是out of memory,内存溢出。查看任务管理器中的进程:(发现内存随时有溢出的情况)但也需要注意,该参数并不是越大越好,适中即可。只有个别原因是需要管理员权限就可执行!可以尽量减少软件的启动。

码农研究僧的博客 5944

查找算法以及代码实现

1.线性查找算法 特别简单的算法,就是遍历数组,一一比较,返回坐标 代码实现: public static void main(String[] args) { int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 int index = seqSearch(arr, -11); if(index == -1) { System.out....

Piratesa的博客 848

用 SAP S/4HANA Configure Predefined Custom Fields 玩转预定义自定义字段:从概念到实战

SAP预定义自定义字段配置指南:安全扩展业务模型的云原生方案 摘要: 本文系统介绍SAP S/4HANA Cloud中预定义自定义字段的配置方法,对比普通自定义字段与预定义字段的区别,阐述其技术特点与业务价值。重点解析"Configure Predefined Custom Fields"应用的核心功能,包括字段元数据配置、多语言支持、UI集成等能力,并通过业务伙伴扩展案例演示完整实施流程。文章指出预定义字段方案在云环境下的独特优势:既满足业务扩展需求,又能保证系统可升级性,是SaaS环

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 80

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数据结构实验——实现顺序查找的算法、实现折半查找的算法实、实现分块查找的算法

1.内容:编写二个程序exp9-3.cpp,输出在顺序表(8,14,6,9,10,22,34,18,19,31,40,38,54,66,78,88,80,85,100,94,88,96,87)中采用分块查找方法查找(每块的长为5,共有5块)关键字46 的过程。1.内容:编写一个程序 exp9-2.cpp,输出在顺序表(1,2,3,4,5,6,7,8,9,10)中采用折半查找方法查找关键字9的过程。(1dxTme7,mtb,RecType R[],intn,KeyTypek),即采用分块查找方法在顺。

u014114223的博客 1389

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C++实现常用查找算法

在日常编程和面试中,查找算法和排序算法需要非常熟练。本文用C++语言的语法来写常用的查找算法:顺序查找,二分查找, 一、顺序查找 1.1基本思想(有序无序皆可以) 1 从表中的第一个元素开始,依次与关键字比较。 2 若某个元素匹配关键字,则查找成功。 3 若查找到最后一个元素还未匹配关键字,则查找失败。 1.2 时空复杂度 1.查找成功时的平均查找长度为:(假设每个数据元素的概率相等) ASL =...

青阳的博客 5944

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

查找算法—顺序查找、二分查找、插值查找、斐波那契查找算法的详解以及Java代码的实现

详细介绍了常见的4种查找算法,比如顺序查找/线性查找、二分查找/折半查找、插值查找、斐波那契查找等,并且提供了相应的Java代码实现。

终生学习践行者 3066

查找算法:顺序查找思想及实现示例

查找算法思想 如果查找到相应的数据项,往往需要返回该数据项的地址或者位置信息。这样。程序中可以通过位置信息来显示数据项、插入数据项、删除数据项等操作。 如果没有查找到相应的数据项,则可以返回相应的提示信息。 在实际应用中,针对不同的情况往往可以选择不同的查找算法。对于无顺序的数据,只有逐个比较数据,才能找到需要的内容,这称为顺序查找。对于有顺序的数据,也可以采用顺序查找法逐个比较,但还可以采...

10 DAY'S 3696

C语言实现七大查找算法(一)

本文主要介绍数据结构中的查找算法,主要介绍顺序查找、折半查找(二分查找)、树表查找、分块查找、哈希查找(散列)。其他的一些查找算法也会有所介绍。 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Key):数据元素中某个数据项的值,又称为键值 主键(Primary Key)...

From Zero to Hero 2万+

java 查找算法_常用查找算法及Java实现

title: 常用查找算法及Java实现description: 常用的一些查找算法,经典必会,Java实现。tags:查找算法categories:算法toc: truecomments: truedate: 2020-07-30 20:05:54常用算法顺序查找顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示...

weixin_29774679的博客 204

查找算法的实现c语言,查找算法的实现(C语言版)

《查找算法的实现(C语言版)》由会员分享,可在线阅读,更多相关《查找算法的实现(C语言版)(6页珍藏版)》请在人人文库网上搜索。1、芬梨受交峙东喊济雏狈违晕裂赵檀芬逛温乌摄阿集亡葫混次馆檄萨集屉歧奋矣历任嚼规顽窝过忽充毁哲惋纪按轮知卞爬奋吊坤荔冯凿呸释焦情搁否剑化限卵流烫婆孵蛤市苹熟晕侮佃瓷良颇胃逞脚黑粘喳测坡脆互疚辜余酷谢昂许迭萎侗哎毅庆淌歌介耙盎诅绒白羞奋倒抛躯墨本扔酞著氓崭换向作难渡钩涅仕榆...

weixin_42195978的博客 414

C++实现查找算法

这里主要讲两种查找算法,一种是顺序查找算法,一种是折半(二分)查找算法,其中二分查找算法主要讲循环实现和递归实现两种方法。下面先看顺序查找。 顺序查找算法 顺序查找算法是按照数组中元素的顺序,按照从左往右或者从右往左的顺序遍历数组,将数组中的元素逐个与要查找的元素进行比较,如果找到,就返回相应的下标,如果到数组遍历完成都没有找到,就返回-1。 实现示例: template<class T&g...

catch_dreamer的博客 597

python顺序查找的递归算法_Python实现四大经典查找算法

本文主要实现查找算法中的二分查找算法,顺序查找,插入查找算法以及fibonacci查找算法,个人认为以上查找算法本质的不同其实就是缩小的区间方式不一样罢了。二分查找算法采用二分缩小区间的方法;顺序查找算法每次缩小一个单位区间;而插入查找算法则通过数据的分布特征来重新计算区间:,就是二分查找的升级版本;最后的fibonacci查找算法的缩小区间的方法则是通过fibonacci数列来确定。同样是本文只...

weixin_39853892的博客 270

Python实现四大经典查找算法

本文主要实现查找算法中的二分查找算法,顺序查找,插入查找算法以及fibonacci查找算法,个人认为以上查找算法本质的不同其实就是缩小的区间方式不一样罢了。二分查找算法采用二分缩小区间的方法;顺序查找算法每次缩小一个单位区间;而插入查找算法则通过数据的分布特征来重新计算区间:,就是二分查找的升级版本;最后的fibonacci查找算法的缩小区间的方法则是通过fibonacci数列来确定。同样...

yinhui_zhang的博客 2668

实现折半查找的算法

/** *    实验题目: *        实现折半查找的算法 *    实验目的: *        领会折半查找的过程和算法设计 *    实验内容: *        设计程序,输出在顺序表(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)中采用 *    折半查找方法查找关键字9的过程 * */ #include &lt;stdio.h&gt; #define MAX_...

xiezhi123456的博客 6762
上一篇: Python版本的tensorflow所遇到的问题
下一篇: 基于Java的栈实现
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值