当前位置: 首页 > news >正文

golang 冒泡、选择、插入、快速排序法

个人学习笔记~

1. 冒泡排序

// @Author sunwenbo
// 2024/4/6 22:37
/*
1. 一共会经过arr.length -1 次的轮数比较,每一轮将会确认一个数的位置
2. 每一轮的比较次数逐渐的减少 [4,3,2,1]
3. 当发现前面的一个数比后面的一个数大的时候,就进行了交换
*/package mainimport "fmt"func bubbleSort(arr1 *[11]int) {fmt.Println("排序前arr=", (*arr1))//完成第一轮排序temp := 0 //临时变量 用作于交换for i := 0; i < len(arr1); i++ {for j := 0; j < len(arr1)-1; j++ {if (*arr1)[j] > (*arr1)[j+1] {temp = (*arr1)[j](*arr1)[j] = (*arr1)[j+1](*arr1)[j+1] = temp}}}}func main() {arr := [...]int{1, 4, 3, 11, 6, 8, 2, 9, 0, 5, 7}//外层控制行for i := 0; i < len(arr)-1; i++ {//内层控制列for j := 0; j < len(arr)-1; j++ {//比较两个相邻的元素 满足条件交换数据//升序使用大于号, 降序使用小于号if arr[j] > arr[j+1] {arr[j], arr[j+1] = arr[j+1], arr[j]}}}fmt.Println(arr)arr1 := [11]int{1, 4, 3, 11, 6, 8, 2, 9, 0, 5, 7}bubbleSort(&arr1)fmt.Println("排序后的arr1=", arr1)
}

2. 选择排序

// @Author sunwenbo
// 2024/4/6 21:49
package mainimport "fmt"/*
选择排序基本介绍选择式排序也属于内部排序法,是从预排序的数据中按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的
*/func selectSort(arr *[6]int) {for j := 0; j < len(arr)-1; j++ {min := arr[j]minIndex := jfor i := j + 1; i < len(arr); i++ {if min > arr[i] {min = arr[i]minIndex = i}}if minIndex != j {arr[minIndex], arr[j] = arr[j], arr[minIndex]}}
}func main() {// 定义数组,从小到大排arr := [6]int{10, 34, 19, 100, 80, 99}selectSort(&arr)fmt.Println("main函数")fmt.Println(arr)
}

3. 插入排序 

// @Author sunwenbo
// 2024/4/7 18:37
package mainimport "fmt"/*
插入排序法介绍:插入式排序属于内部排序法,是对预排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的插入排序(insertion Sorting)的基本思想是:把N个待排序的元素堪称一个有序表和一个无序表,开始时有序表中包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中第一个元素,把它的排序码
依次与有序表元素的排序码进行比较,将它插入到有序表中的适当为止,使之成为新的有序表
*/func InsertSort(arr *[7]int) {for i := 1; i < len(arr); i++ {// 完成第一次,给第二个元素找到合适的位置并插入insertVal := arr[i]insertIndex := i - 1 //下标// 从大到小for insertIndex >= 0 && arr[insertIndex] < insertVal {arr[insertIndex+1] = arr[insertIndex] // 数据后移insertIndex--}// 插入if insertIndex+1 != i {arr[insertIndex+1] = insertVal}fmt.Printf("第%d次插入后 %v \n", i, *arr)}
}func main() {arr := [7]int{23, 0, 12, 56, 34, -1, 55}fmt.Println("原始数组=", arr)InsertSort(&arr)fmt.Println("main函数")fmt.Println(arr)
}

 4. 快速排序

// @Author sunwenbo
// 2024/4/8 11:26
package mainimport "fmt"/*
快速排序法介绍:
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都要比另外一部分的数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据编程有序序列
*/
// 快速排序
// 1. left表示数组左边的下标
// 2. right 表示数组右边的下标
// 3. array 表示要排序的数组func QuickSort(left int, right int, array *[6]int) {l := leftr := right// pivot是中轴,支点pivot := array[(left+right)/2]temp := 0// for 循环的目标是将比pivot小的数放到左边,大的数放到右边for l < r {// 先从pivot 的左边找到大于等于pivot的值for array[l] < pivot {l++}// 从pivot的右边找到小于等于pivot的值for array[r] > pivot {r--}// l >= r 表明本次分解任务完成if l >= r {break}// 交换temp = array[l]array[l] = array[r]array[r] = temp// 优化if array[l] == pivot {r--}if array[r] == pivot {l++}}// 如果l==r,再移动一位就不要比较了if l == r {l++r--}// 向左递归if left < r {QuickSort(left, r, array)}// 向右递归if right > l {QuickSort(l, right, array)}
}func main() {arr := [6]int{-9, 78, 0, 23, -567, 70}// 调用快速排序QuickSort(0, len(arr)-1, &arr)fmt.Println("第一种方法排序后的数组:", arr)fmt.Println("###################")arr2 := []int{10, 7, 8, 9, 1, 5}n := len(arr2)quickSort(arr2, 0, n-1)fmt.Println("第二种方法排序后的数组:", arr2)
}// 快速排序函数
func quickSort(arr []int, low, high int) {if low < high {// 划分pivot := partition(arr, low, high)// 递归排序左右子数组quickSort(arr, low, pivot-1)quickSort(arr, pivot+1, high)}
}// 划分函数
func partition(arr []int, low, high int) int {pivot := arr[high] // 选择最后一个元素作为基准值i := low - 1       // i 为小于基准值的最后一个元素的索引for j := low; j < high; j++ {if arr[j] < pivot {i++// 将小于基准值的元素放到左边arr[i], arr[j] = arr[j], arr[i]}}// 将基准值放到正确的位置上arr[i+1], arr[high] = arr[high], arr[i+1]return i + 1
}

 

相关文章:

golang 冒泡、选择、插入、快速排序法

个人学习笔记&#xff5e; 1. 冒泡排序 // Author sunwenbo // 2024/4/6 22:37 /* 1. 一共会经过arr.length -1 次的轮数比较&#xff0c;每一轮将会确认一个数的位置 2. 每一轮的比较次数逐渐的减少 [4,3,2,1] 3. 当发现前面的一个数比后面的一个数大的时候&#xff0c;就进行…...

vue3 +Taro 页面实现scroll-view 分页功能

需求 现在分页列表 后端只给你一个分页的数据列表 没有总页数 没有当前的分页 页数 只有这么一个list 、、、 如何去分页 我这使用的是scroll-view 组件 滑动到底部的事件 根据你当前设定的每页的数据数量和后端返回给你的数据列表数量 当某一次分页 两个数量不相等了以后 就…...

【http】常见http headers

相关文章&#xff1a;http 状态码 和http methods及restful api 常见http headers 1 常见的Request Headers Accept 浏览器可接收的数据格式 Accept-Encoding 浏览器可接收的压缩算法&#xff0c;gzip Accept-language 浏览器可接收的语言 Connection:keep-alive 一次TCP连接…...

Web App 入门指南:构建预测模型 App 的利器(shiny)

Web App 入门指南&#xff1a;构建预测模型 App 的利器 简介 近年来&#xff0c;随着机器学习和人工智能技术的快速发展&#xff0c;预测模型在各行各业得到了广泛应用。为了方便地部署和使用预测模型&#xff0c;将模型构建成 Web App 是一种非常好的选择。Web App 无需下载…...

6.7物联网RK3399项目开发实录-驱动开发之Camera摄像头的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接&#xff1a;https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f Camera 使用 简介 AIO-3399J 开发板分别带有两个 MIPI&#xff0c;MIPI 支持最高 4K 拍照&#xff0c;并支持 1080P 30fp…...

OSCP靶场-- Sybaris

OSCP靶场–Sybaris 考点(redis MODULE LOAD命令执行) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.158.93 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-11 04:24 EDT Nmap scan report for 192.168.158.93…...

MyBatis 执行流程

加载配置文件:MvBatis 的执行流程从加载配置文件开始。通常&#xff0c;MyBatis 的配置文件是一个 XML 文件&#xff0c;其中包含了数据源配置、SQL 映射配置、连接池配置等信息。构建 SqlSessionFactory:在配置文件加载后&#xff0c;MyBatis 使用配置信息来构建 SqlSessionFa…...

android11 SystemUI入門之KeyguardPatternView解析

view层级树为&#xff1a; 被包含在 keyguard_host_view.xml中 。 <?xml version"1.0" encoding"utf-8"?> <!-- This is the host view that generally contains two sub views: the widget viewand the security view. --> <com.andro…...

doss攻击为什么是无解的?

这个让Google、亚马逊等实力巨头公司也无法避免的攻击。可以这么说&#xff0c;是目前最强大、最难防御的攻击之一&#xff0c;属于世界级难题&#xff0c;并且没有解决办法。 Doss攻击的原理不复杂&#xff0c;就是利用大量肉鸡仿照真实用户行为&#xff0c;使目标服务器资源…...

2. 如何让mybatis-plus的逻辑删除注解@TableLogic临时失效

文章目录 如何让mybatis-plus的逻辑删除注解TableLogic临时失效1. 场景复现1.1 controller代码1.2 service层代码1.3 entity代码 2. 问题分析3. 解决方案3.1 说明3.2 核心代码3.3 service方法对应修改为3.4 运行结果 如何让mybatis-plus的逻辑删除注解TableLogic临时失效 1. 场…...

基于单片机的智能窗帘系统设计

摘要: 介绍了一种智能窗帘系统,该系统由单片机STC89C52 为控制核心,光照控制电路采用光敏电阻和ADC0832 芯片,步进电机驱动电路采用ULN2003 芯片,以达到不同光照强度下窗帘的自动启闭。仿真和实物结果显示,该系统实用性强,应用范围广,具有很好的应用前景。 关键词: 单片…...

代码随想录 Day17 字符串 | LC344 反转字符串 LC541 反转字符串II 卡码网54替换数字

一、反转字符串 题目&#xff1a; 力扣344&#xff1a;反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题…...

LeetCode 刷题汇总——题目序号顺序版

剑指 Offer——和为 S 的两个数字 剑指 Offer——数字在排序数组中出现的次数 剑指 Offer——和为 S 的连续正数序列 剑指 Offer——最小的 K 个数 剑指 Offer——连续子数组的最大和 剑指 Offer——数组中的逆序对 LeetCode 1——两数之和 LeetCode 2——两数相加 LeetCode 3…...

【Java】JDK1.8 HashMap源码,put源码详细讲解

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 在Java中&#xff0c;HashMap结构是被经常使用的&#xff0c;在面试当中也是经常会被问到的。这篇文章我给大家分享一下我对于HashMap结构源码的理解。 HashMap的存储与一般的数组不同&#xff0c;HashMap的每一个元素存…...

自定义注解进行数据转换

前言&#xff1a; Java注解是一种元数据机制&#xff0c;可用于方法&#xff0c;字段&#xff0c;类等程序上以提供关于这些元素的额外信息。 以下内容是我自己写的一个小测试的demo,参考该文章进行编写&#xff1a;https://blog.csdn.net/m0_71621983/article/details/1318164…...

React - 你知道在React组件的哪个阶段发送Ajax最合适吗

难度级别:中级及以上 提问概率:65% 如果求职者被问到了这个问题,那么只是单纯的回答在哪个阶段发送Ajax请求恐怕是不够全面的。最好是先详细描述React组件都有哪些生命周期,最后再回过头来点题作答,为什么应该在这个阶段发送Ajax请求。那…...

spa、vue、elementUi

spa (single page application). 动态重写当前页面而非从服务器重新加载整个新页面。使应用程序更像一个桌面应用程序。所有的html、javascript、css通过单个页面检索加载资源。前端页面使用ajax与后端通信。一个项目只有一个html页面。所有的页面跳转都通过路由导航。 vue可用…...

tcp接受命令执行并回显

为了实现循环执行命令并能够多次从TCP客户端接收命令&#xff0c;您需要对上面的代码进行一些修改。下面是一个修改后的示例&#xff0c;它将在接收到新的TCP连接后进入一个循环&#xff0c;不断地读取命令、执行命令&#xff0c;并将结果发送回客户端&#xff0c;直到客户端断…...

LLMs之ToolAlpaca:ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略

LLMs之ToolAlpaca&#xff1a;ToolAlpaca(通用工具学习框架/工具使用语料库)的简介、安装和使用方法、案例应用之详细攻略 目录 ToolAlpaca的简介 0、《ToolAlpaca: Generalized Tool Learning for Language Models with 3000 Simulated Cases》翻译与解读 1、数据集列表 2…...

TCP/IP协议介绍

TCP/IP协议 先看&#xff1a;程序员必备基础知识-TCP/IP协议详解.(超详细&#xff09; 太厉害了&#xff0c;终于有人能把TCP/IP协议讲的明明白白了&#xff01; 面试官&#xff1a;如何理解TCP/IP协议? 一个很全的介绍博客&#xff1a;史上最全的TCP/IP协议原理 对TCP三次握…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

C# SqlSugar:依赖注入与仓储模式实践

C# SqlSugar&#xff1a;依赖注入与仓储模式实践 在 C# 的应用开发中&#xff0c;数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护&#xff0c;许多开发者会选择成熟的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;SqlSugar 就是其中备受…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...