首页 > 其他分享 >go语言学习-冒泡排序

go语言学习-冒泡排序

时间:2023-04-08 20:31:41浏览次数:44  
标签:第一轮 语言 迭代 list 交换 冒泡排序 go 比较

冒泡排序

冒泡排序属于交换类的排序算法,比如有一段乱序的数,5 9 1 6 8 14 6 49 25 4 6 3

第一轮迭代: 从第一个数开始,依次比较相邻的两个数,如果后面的一个数比前面的一个数大,那么交换位置,直接到处理最后一个数,最后这个数是最大的

第二轮迭代,因为最后一个数已经是最大的了,重复第一轮操作,但是只处理倒数第二个数

第三轮迭代,因为最后一个数已经是最大的了,最后第二个数是次大的,重复第一轮迭代操作,但是处理第倒数第三个数。

因为小的元素会慢慢浮现到顶端,就想像气泡一样,会冒上去,所以这就是冒泡排序的来源。

[]表示排好序 {}表示比较后交换的结果

第一轮开始: 4 2 9 1 从第一个数开始,4 比 2 大,交换 4,2
第一轮: {2 4} 9 1  接着 4 比 9 小,不交换
第一轮: 2 {4 9} 1  接着 9 比 1 大,交换 9,1
第一轮: 2 4 {1 9}  已经到底,结束
第一轮结果: 2 4 1 [9] 

第二轮开始:2 4 1 [9] 从第一个数开始,2 比 4 小,不交换
第二轮: {2 4} 1 [9] 接着 4 比 1 大,交换 4,1
第二轮: 2 {1 4} [9] 已经到底,结束
第二轮结果: 2 1 [4 9] 

第三轮开始:2 1 [4 9] 从第一个数开始,2 比 1 大,交换 2,1
第三轮: (1 2} [4 9] 已经到底,结束
第三轮结果: 1 [2 4 9] 

结果: [1 2 4 9]

当数列的元素数量为 N,冒泡排序有两种循环,需要比较的次数为:

第一次比较的次数为: N-1 次
第二次比较的次数为: N-2 次,因为排除了最后的元素
第三次比较的次数为: N-3 次,因为排除了后两个元素
...
第某次比较的次数为:  1 次

算法实现

package main

import "fmt"

func BubbleSort(list []int) {
    n := len(list)
    // 在一轮中有没有交换过
    didSwap := false

    // 进行 N-1 轮迭代
    for i := n - 1; i > 0; i-- {
        // 每次从第一位开始比较,比较到第 i 位就不比较了,因为前一轮该位已经有序了
        for j := 0; j < i; j++ {
            // 如果前面的数比后面的大,那么交换
            if list[j] > list[j+1] {
                list[j], list[j+1] = list[j+1], list[j]
                didSwap = true
            }
        }

        // 如果在一轮中没有交换过,那么已经排好序了,直接返回
        if !didSwap {
            return
        }
    }
}

func main() {
    list := []int{5, 9, 1, 6, 8, 14, 6, 49, 25, 4, 6, 3}
    BubbleSort(list)
    fmt.Println(list)
}

输出:

[1 3 4 5 6 6 6 8 9 14 25 49]


标签:第一轮,语言,迭代,list,交换,冒泡排序,go,比较
From: https://blog.51cto.com/u_11555417/6177887

相关文章

  • 分析以下数字的规律1 1 2 3 5 8 13 21用Python语言编程实现输出,此为斐波那契数列
    方法一:list1=[]#定义一个空列表foriinrange(15):#遍历语句循环15次ifi==0ori==1:#前两个数字的值都是1list1.append(1)#print(list1)else:list1.append(list1[i-1]+list1[i-2])print(list1)方法二:list1=[1,......
  • C#语言基础(类型转换)
    类型转换分为两类:自动转换(隐式转换)与强制转换。1.自动转换:将一个小范围的数据类型转换成较大范围的数据类型(实际上就是从低精度的数值类型到高精度的数值类型的转换)。例:doublea=10.25;        intb=10;        doubleresult=a+b;//将int类型转换为d......
  • windows 下使用CMake 配置 googletest测试库
    这个项目实际包含的知识细节,可以在微软的网站找到支持:1.安装googletest.下载,解压,googletest 进入开发者模式cmd界面: DeveloperCommandPromptforVS2022 编译,安装googletest#在解压后的目录下mkdirbuildcdbuild#准备安装在d:/googletestcmake-S..-B......
  • Solon2 之 Groovy 语言开发后端接口项目
    今天再做个新的尝试,用Solon框架写个Groovy后端项目。借助“SolonInitializr”生成个项目模板,会比较方便。1、生成项目模板打开“SolonInitializr”:https://solon.noear.org/start/,在语言那儿选择"Groovy",再选上项目类型为“Gradle-Groovy”。然后点“生成”就会自......
  • Golang反射获取变量类型和值
    Golang反射获取变量类型和值 1.什么是反射反射是程序在运行期间获取变量的类型和值、或者执行变量的方法的能力。Golang反射包中有两对非常重要的函数和类型,两个函数分别是:reflect.TypeOf能获取类型信息reflect.Type;reflect.ValueOf 能获取数据的运行时表示reflect.Val......
  • 使用Golang实现Nginx代理功能
    由于业务需要实现对多个web应用做同域二级目录代理,用NGINX的又感觉太重了,而且不好做配置页面,用golang来实现代理功能支持正则表达式匹配机制支持多应用多级目录代理。支持应用子路由代理支持webapi代理支持websocket代理支持禁用缓存设置支持http、https混合使用支持/dir......
  • golang中的substring
    发现golangstrings包中没有javastring.substring方法,于是尝试了下:想要在java中实现提取“世”的需求//java代码Strings="Hello,世界";System.out.println(s.substring(7,8));//世在golang中尝试这样://golang代码s1:="Hello,世界"fmt.Println(s1[7:8])//�因为......
  • 巧如范金,精比琢玉,一分钟高效打造精美详实的Go语言技术简历(Golang1.18)
    转自刘悦研发少闲月,九月人倍忙。又到了一年一度的“金九银十”秋招季,又到了写简历的时节,如果你还在用传统的Word文档寻找模板,然后默默耕耘,显然就有些落后于时代了,本次我们尝试使用云平台flowcv高效打造一份巧如范金、精比琢玉的高品质Golang技术简历。首先来到云平台:flowcv.com......
  • django model ForeignKey ,解决外键字段增加_id 的问题
    例如:主表-模型: Author:id,name副表-模型:Book:id,author(ForeignKey:Author),name 1.数据库字段增加_id的问题,网上有很多教程,可以使用 db_column='yourname'2.当Book查询中,使用filter,all等查询,都会得到字段author_id,而不是author,可以使用values(),方法指定字段名称,例......
  • mogodb 同步数据到 ElasticSearch
    1、需安装:mogodb  ElasticSearch monstache2、mogodb创建副本集主副主开启副本集设置:replication:replSetName:"S1"副机关闭防火墙,设置net:port:27017bindIp:0.0.0.0"C:\ProgramFiles\MongoDB\Server\4.4\bin\mongo.exe"127.0.0.1:27017配置:rs.initiate({......