30-Golang中的排序和查找

news2025/7/13 16:09:59

排序和查找

    • 排序的基本介绍
      • 交换式排序法
        • 交换式排序法-冒泡排序
    • 查找
      • 顺序查找
      • 二分查找

排序的基本介绍

排序是将一组数据,依指定的顺序进行排列的过程

排序的分类:

  • 1.内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换式排序法,选择式排序法,插入式排序法)
  • 2.外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法,直接合并排序法)

交换式排序法

交换式排序属于内部排序法,是运用数据值比较后,依判规则对数据位置进行交换,以达到排序的目的。

交换式排序法又可分为两种

1.冒泡排序法(bubble sort)

2.快速排序法(quick sort)

交换式排序法-冒泡排序

冒泡排序的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元向下标较小的单元),就像水底下的气泡一样逐渐向上冒。因为排序的过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序的过程中设置一个标志flag判断元素是否进行过交换,从而减少不必要的比较。

package main
import (
	"fmt"
	
)

func BubbleSort(arr *[5]int) {
	fmt.Println("排序前arr=", (*arr))

	
	for i:= 0; i < len(*arr) - 1; i++{
		
		for j := 0; j < 3; j++ {
			if (*arr)[j] > (*arr)[j + 1] {
				//交换
				temp := (*arr)[j]
				(*arr)[j] = (*arr)[j + 1]
				(*arr)[j + 1] = temp
			}
		}
	}
	fmt.Println("排序后arr=", (*arr))
}

func main() {
	arr := [5]int{12,45,89,64,58}

	BubbleSort(&arr)
}

/*
排序前arr= [12 45 89 64 58]
排序后arr= [12 45 64 89 58]
*/



查找

在golang中常用的查找有两种

1.顺序查找

2.二分查找

顺序查找

package main
import (
	"fmt"
	
)


func main() {
	names := [4]string{"kun", "ikun", "kunkun", "heizi"}
	var heroName = " "
	fmt.Println("请选择你的英雄")
	fmt.Scanln(&heroName)


	//第一种方式
	for i := 0; i < len(names); i++ {
		if heroName == names[i] {
			fmt.Printf("您的英雄是%v, 下标%v\n", heroName, i)
			break
		} else if i == (len(names) - 1){
			fmt.Printf("没有找到%v\n", heroName)
		}
	}

	//第二种方式
	index := -1
	for i := 0; i < len(names); i++{
		if heroName == names[i] {
			index = i //将找到的值对应的下标赋给index
			break
		}
	}
	if index != -1 {
		fmr.Printf("你的英雄是%v, 下标%v \n", heroName, index)
	} esle {
		fmt.Printf("没有找到%v", heroName)
	}
}
/*
请选择你的英雄
heizi
您的英雄是heizi, 下标3

请选择你的英雄
kunkunkun
没有找到kunkunkun
*/


二分查找

在这里插入图片描述

package main
import (
	"fmt"
	
)

func BinaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int){
	//判断leftIndex是否大于rightIndex
	if leftIndex > rightIndex {
		fmt.Println("找不到")
		return
	}

	//先找到中间的下标
	middle := (leftIndex + rightIndex) / 2
	
	if (*arr)[middle] > findVal {
		//说明我们要查找的数,应该在  leftindex --- middle -1 
		BinaryFind(arr, leftIndex, middle - 1, findVal)
	} else if (*arr)[middle] < findVal {
		//说明我们要茶渣的数应该在middle + 1---rightindex
		BinaryFind(arr, middle + 1 , rightIndex, findVal)
	} else {
		//找到了
		fmt.Printf("找到了, 下标为%v \n", middle)
	}
}


func main() {
	arr := [6]int{1, 8, 10, 89, 1000, 1234}
	
	//测试
	BinaryFind(&arr, 0, len(arr) - 1, 1000)
}




//找到了, 下标为4 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20N65-ASEMI高压MOS管20N65

编辑-Z 20N65在ITO-220AB封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为0.42Ω&#xff0c;是一款N沟道高压MOS管。20N65的最大脉冲正向电流ISM为80A&#xff0c;零栅极电压漏极电流(IDSS)为10uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。20N65功耗&…

Spring Boot最核心的27个注解,你了解多少?

https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架&#xff0c;它不仅可以方便地创建生产级的Spring应用程序&#xff0c;还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…

前端学习第一阶段——第五章CSS(下)

5-9 浮动 08-浮动导读 09-传统网页布局三种方式 10-为什么需要浮动 11-什么是浮动 12-浮动特性-脱标 13-浮动特性-浮动元素一行显示 14-浮动特性-浮动元素具有行内块特性 15-浮动元素经常搭配标准流的父元素 16-浮动布局练习1 <!DOCTYPE html> <html lang"en&quo…

从青铜到王者,揭秘 Serverless 自动化函数最佳配置

作者&#xff1a;丛霄 背景介绍 全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。 Serverless 的目标之一是免运维&#xff0c;但仍旧存在一些障碍&#xff0c;在 Serverless 场景特有的一些关键服务配置比如**“并发度”、“最小实…

史上最详细的PyCharm快速上手指南,你值得拥有

上一节中我们介绍了Python并安装了环境&#xff0c;有了Python环境我们就可以开发了吗&#xff1f;各位朋友们。 也可以也不可以&#xff01;哈哈哈不要怪我朋友们&#xff0c;我说的是事实。 如果你喜欢Python自带的Python命令开发&#xff0c;即我们所说的交互式&#xff0…

5.33 综合案例2.0 -ESP32拍照上传阿里云OSS

综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS&#xff08;通过4G网络上传&#xff09;。 …

【ArcGIS Pro二次开发】(4):ArcGIS Pro封装的窗体控件

在ArcGIS Pro&#xff0c;有一类窗体控件是系统已经封装好的&#xff0c;比如消息框、提醒框等。下面通过代码来学习一下。 新建一个项目&#xff0c;命名为【ProWindow】&#xff0c;添加5个按钮&#xff0c;命名为【Show_MessageBox、Show_NoticeBox、Show_OpenDialog、Show…

交通部互通互联码的根证书规则

引言 为了更好的服务交通互通互联码而更新这篇文章。 中金根证书其实是可以自己生成的。 代码内调整 中心公钥索引要保证自己的唯一性。 此处的唯一&#xff0c;是要保证在机具侧的唯一&#xff0c;因为他要根据这个索引去查找证书以及公钥。 提供根公钥给机具侧 生成的公钥…

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机&#xff0c;我们可以从中探索它们的特征。&#xff08;图片来源&#xff1a;网络&#xff09;我们完全有理由怀疑生命在我们的宇宙中很常见&#xff0c;但是为什么我们从未发现过其他生命存在的迹象&#xff1f;这个问题几乎自现代天文学诞…

JavaScript 教程

手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言&#xff0c;它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员&#xff0c;但是 JavaScript 却拥有非常简单的语法。几…

SpringBoot Data JPA配置多数据源

SpringBoot Data JPA配置多数据源1. Dependency2. Application.properties3. Code3.1 Datasource config3.2 Primary Config3.3 Second Config4. Awakening1. Dependency <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jd…

常用设计模式介绍

java设计模式类型创建型模式&#xff1a;将对象的创建与使用分离结构型模式&#xff1a;如何将类和对象按照某种布局组成更大的格局行为型模式&#xff1a;用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务23种设计模式介绍1.单例&#xff08;Singleton&…

linux高级命令之软件安装

软件安装学习目标能够使用apt-get命令安装软件1. 软件安装的介绍Ubuntu软件安装有两种方式:离线安装(deb文件格式安装&#xff09;在线安装(apt-get方式安装)2. deb文件格式安装是 Ubuntu 的安装包格式&#xff0c;可以使用 dpkg 命令进行软件的安装和卸载。命令说明dpkg安装和…

以“大数据”赋能产业链精准招商

​ 随着我国产业发展的不断迭代升级&#xff0c;传统招商模式的不足逐步凸显&#xff0c;侧重土地与税费优惠的同质化竞争招商以及来者不拒的无门槛型招商已经遏制了区域产业的发展&#xff0c;导致各产业园区很难形成产业集聚及持续的吸引力。在这样的大环境下&#xff0c;产业…

使用LogToHtml导出Airtest报告

simple_report接口&#xff0c;是个简化版的生成报告接口&#xff0c;如果仅仅需要在本地查看的话&#xff0c;用这个接口即可。 但是如果需要导出报告&#xff0c;即他人也可以正常查看&#xff0c;则需要用LogToHtml类。 参数解释 script_root&#xff0c;脚本路径 log_ro…

论一个上班族如何一次性通过PMP考试

PMP是我工作后考取的一个证书。从准备到通过&#xff0c;花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作&#xff0c;工作一段时间后&#xff0c;天天敲着代码&#xff0c;改着bug&#xff0c;感觉比较迷茫&#xff0c;不知道未来的发展在哪里&#xff0c;都说…

Viper捐款7000万韩元,合计人民币是多少钱?

Viper捐款7000万韩元&#xff0c;合计人民币是多少钱&#xff1f; #2023LCK春季赛##英雄联盟# #Viper捐款7000万韩元# Viper向大田东区捐款 7000 万&#xff0c;成为大田荣誉协会 105 号会员。Viper选手从 2019 年开始一直向大田东区捐款&#xff0c;但是他不希望这件事被公开…

[VMware]Ubuntu18.04 网络图标消失

Ubuntu 18.04 网络图标消失运行环境问题解决NO.1 执行 sudo systemctl stop network-managerNO.2 执行 sudo rm /var/lib/NetworkManager/NetworkManager.stateNO.3 执行 sudo systemctl start network-managerNO.4 vi /etc/NetworkManager/NetworkManager.confNO.5 执行 sudo …

【Linux 多线程】线程的4大基础操作(创建、等待、终止、分离)

目录 1.线程的创建 2.线程等待 3.线程分离 线程共享一个地址空间 &#xff0c;把资源&#xff08;代码和数据&#xff09;化成若干份&#xff0c;供各个线程使用 线程的栈和上下文不是共享的以前学习的进程是具有一个线程的进程1.线程的创建 成功返回0&#xff0c;失败返回…

第一章:初始化react项目+antd+less

初始化react项目 我们首先使用react脚手架创建一个项目 Ant Design less creact-react-app中文文档 creact-react-app demo生产环境打包运行 当我们执行了 npm run build 打包后直接访问index.html 看效果白屏 这时候就需要安装一个serve包 npm install -g serve当我们安…