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

冒泡排序和选择排序(Go语言实现)

冒泡排序和选择排序是排序算法中比较简单和容易实现的算法。冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端。而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序。 
选择排序的平均时间复杂度比冒泡排序稍高,下面我们使用GO语言进行编写

冒泡排序

func bubble(num []int64) []int64 {
    flag := true
    for i := len(num) - 1; i >= 0; i-- {
        for j := 0; j < i; j++ {
            //冒泡,泡沫往上越大,较大的数上移
            if num[j] > num[j + 1] {
                Swap(num, j, j + 1)
                flag=false
            }
        }
        //优化不必要的交换
        if flag {
            break
        }
    }

    return num
}



func Swap(num []int64, i int, j int) {
    temp := num[i]
    num[i] = num[j]
    num[j] = temp
}

选择排序

func Select(num []int64) []int64 {
    for i := 0; i < len(num) - 2; i++ {
        min:=num[i]
        local:= i
        for j := i + 1; j <= len(num)-1; j++ {
            if min>num[j] {
                min=num[j]
                local=j
            }
        }
        Swap(num,local,i)
    }
    return num
}

func Swap(num []int64, i int, j int) {
    temp := num[i]
    num[i] = num[j]
    num[j] = temp
}

 

 

package main

import "fmt"
import "./sel"
//变量在前,类型在后
func main() {
    num :=[]int64{11, 5, 25, 3, 42, 27,53,82,11, 2}
    //bub.bubble(num)
    sel.Select(num)
    for i ,_:=range num {
        fmt.Print(i)
    }
}

 

相关文章:

  • 虚拟化环境中的DHCP Snooping部署注意点
  • 使用nvm来管理nodejs版本
  • SQL Server事务日志分析
  • 如何优化VMware Linux虚拟机的性能?
  • java面试第十二天
  • os.walk函数
  • 牛顿开方法的算法及其原理
  • Shiro源码分析 - ShiroFilterFactoryBean初始化
  • 【BZOJ 1015】[JSOI2008]星球大战starwar
  • web.xml关于spring的讲解
  • 【ASP.NET Identity系列教程(三)】Identity高级技术
  • rhel配置网络yum源
  • js写一个简单的选项卡
  • 12.cmake安装mysql5.5.56 多实例
  • RPi 2B apache2 mysql php5 and vsftp
  • es的写入过程
  • Java 最常见的 200+ 面试题:面试必备
  • Laravel核心解读--Facades
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • spring boot 整合mybatis 无法输出sql的问题
  • 基于web的全景—— Pannellum小试
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 检测对象或数组
  • 开发基于以太坊智能合约的DApp
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前嗅ForeSpider教程:创建模板
  • 浅谈web中前端模板引擎的使用
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何设计一个微型分布式架构?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 主流的CSS水平和垂直居中技术大全
  • $$$$GB2312-80区位编码表$$$$
  • (003)SlickEdit Unity的补全
  • (1)SpringCloud 整合Python
  • (day6) 319. 灯泡开关
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (ZT)出版业改革:该死的死,该生的生
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (一)SpringBoot3---尚硅谷总结
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)为C# Windows服务添加安装程序
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .Net FrameWork总结
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .net项目IIS、VS 附加进程调试