顺序查找|学习笔记

简介: 快速学习顺序查找。

开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:顺序查找】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9648


顺序查找

 

内容介绍

一、查找方法简介

二、案例演示

 

一、查找方法简介

Golang 中,常用的查找有两种:

1顺序查找

按照顺序进行一个一个的比对,查看数组里面有没有需要查找的元素。

2二分查找

相对效率高很多,其中用到了递归的知识点,也就是说在一个有序数列里面进行二分查找,因此要用二分查找有一个前提,就是该数组要是有序的,不是有序的,就不能使用二分查找。所以要使用二分查找就要先将数组有序排列,然后再使用二分查找。

 

二、案例演示

1、案例要求

有一个数列: 白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王

猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称[顺序查找]

2、分析思路

首先新建文件夹 findemo,再新建文件 main.go,文件中引入“fmt“包,然后定义一个主函数。

package main

import(

“fmt”

)

func main( ){

}

题目要求的顺序查找,那就要按照顺序查找,下面开始分析思路。

(1)首先定义一个数组,数组中存放信息为白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王,而只有字符串数组能存放这些信息。

(2)从控制台接收一个名称,然后进行依次比较,如果发现有提示相应信息。

代码分析,第一步先定义一个数组 name,有4个元素,元素值为白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王,那既然是字符串数组,就需要““将元素括起来。第二步定义一个变量 heroName,给变量一个空值,然后进行信息提示为”请输入要查找的人名“,再 Scanln 进行接收。接下来在上面代码的基础上进行顺序查找:

3、方式一

顺序查找第一种方式:

用 for 循环一个个的查找,i 初始值为0,i 小于len(names),要把数组的长度求出,再 i++,那如果当前输入的名称heroName 等于当前对应的数组下标为i的值,则说明找到了,就提示信息为找到 herName,下标为 i,然后退出。那如果找到了就提示找到的信息,没找到就进行 else,这是不一定的,因为第一次查找可能没有找到,但后面再进行几次说不定又找到了,所以不能马上做 else 判断,应该为 else if,如果i等于长度减1,就说明i到达了最后一个元素,而最后一个元素都还没在 if 中找到,就说明输入的名称没有找到,所以这时就提示没有找到 heroName。

代码为:

func main() {

//代码

names :=[4]string{"白眉鹰王”,”金毛狮王",“紫衫龙王","青翼蝠王”}

var heroName =””

fmt.PrintIn("请输入要查找的人名...")

fmt.Scanln( &heroName )

//顺序查找:第一种方式

for i := 0; i< len(names); i++ {

if heroName == names [i]{

fmt.Printf("找到%v,下标%v ", heroName, i)

break

} else if i == (len(names) - 1) {

fmt.Printf("找到%v,下标", heroName, i)

}

}

下面进行运行一下:

D:\goproject\src\go_code\chapte08\cd finddemo

D:\goproject\src\go_code\chapter08\finddemo>go run main. go

请输人要查找的人名...

hello

没有找到 hello

D:\goproject\src\go_code\chapter08\finddemo>go run main. go

请输入要查的人名..

金毛狮王

找到金毛狮王,下标1

回到代码中查看金毛狮王下标确实为1

4、方式二

第二种方式:

先定义下标 index 等于-1,如果找到了就把真实的下标赋值给 index,如果找不到 index 就一直保持值为-1,整个思路就这里和上面的变了,与上面的开头思路是一样的,如果输入的 heroName 等于当前下标为 i 的值,就是在数组中找到了输入的值,便将找到的值对应的下标 i 赋给 index, 再 break 退出。这时通过看 index 的值就可以判断找没找到,如果 index 等于-1,就说明没有找到,则打印,如果不等于-1就说明找到了,则打印 heroName,下标值为index。这里推荐使用第二种方式思路更清晰,找到了就 break 跳出,再将下标放到 index 中,直接通过 index 判断有没有找到。

代码为:

index :=-1

for i := 0; i < len(names);i++ {

if heroName == names [i] {

index=i //将找到的值对应的下标赋给 index

break

}

}

if index !=-1 {

fmt.Printf("找到%v,下标%v \n", heroName, index)

} else {

fmt.Println("没有找到"heroName)

}

下面进行运行一下:

D:\goproject\src\go_code\chapter08\finddemo>go run main. go

请输人要查找的人名...

tom

没有找到tom

D:\goproject\src\go_code\chapter08\finddemo>go run main. go

请输入要查的人名..

紫衫龙王

找到紫衫龙王,下标2

回到代码中观察紫衫龙王下标确实为2,功能实现成功。那这里可以发现其实顺序查找效率是比较低的,因为如果数组中有很多元素,是一些数字的话,要把整个数组扫描一遍才能知道元素是否存在,所以还有一种查找方式是二分查找。

相关文章
|
机器学习/深度学习 搜索推荐 语音技术
进阶教程:优化语音克隆效果与提升TTS自然度
【10月更文挑战第20天】语音克隆技术和基于文本到语音(Text-to-Speech, TTS)系统的应用已经在诸多领域展现出了巨大的潜力,从智能助手到个性化客服,再到教育和娱乐产业。作为一名在语音技术领域有着多年实践经验的研发人员,我希望通过本文分享一些我个人在优化语音克隆效果与提升TTS自然度方面的经验和见解,帮助那些已经具备了一定基础并希望进一步提升自身技能的同行们。
761 0
|
机器学习/深度学习 数据采集 人工智能
人工智能:构建自定义机器学习模型的步骤与技巧
【6月更文挑战第25天】构建自定义机器学习模型涉及明确问题、数据收集预处理、特征工程、模型选择训练、评估优化及部署监控。关键技巧包括选择适配的算法、重视数据预处理、精巧的特征工程、有效评估优化和适时的模型更新。通过这些步骤和技巧,可提升模型性能与泛化能力。
|
机器学习/深度学习 人工智能 边缘计算
24/7全时守护:AI视频监控技术的深度实现与应用分享
本文深入解析了AI视频监控系统在车间安全领域的技术实现与应用,涵盖多源数据接入、边缘计算、深度学习驱动的智能分析及高效预警机制,通过具体案例展示了系统的实时性、高精度和易部署特性,为工业安全管理提供了新路径。
3166 7
|
人工智能 语音技术
通义语音AI技术问题之Qwen-Audio对多任务预训练中的干扰问题如何解决
通义语音AI技术问题之Qwen-Audio对多任务预训练中的干扰问题如何解决
203 2
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
费德勒权变模型(Fiedler Contingency Model)详解与Python代码示例
|
存储 SQL 安全
【Azure 应用服务】App Services 恶意软件防护相关
【Azure 应用服务】App Services 恶意软件防护相关
116 0
端口被占用?两步解决端口占用问题
端口被占用?两步解决端口占用问题
1499 0
|
负载均衡 监控 网络协议
高可用 - 03 Keepalived_ Keepalived工作原理&体系结构
高可用 - 03 Keepalived_ Keepalived工作原理&体系结构
384 0
|
消息中间件 运维 负载均衡
Zookeeper 3.5.8 & Kafka 2.4.0 安装与调优
Zookeeper 3.5.8 & Kafka 2.4.0 安装与调优
1297 0