首页 > 其他分享 >3、插入排序-Go语言版

3、插入排序-Go语言版

时间:2022-10-14 12:34:10浏览次数:79  
标签:arr 插入 插入排序 元素 序列 Go 排序 语言版

前情提示
Go语言学习者,文章若有不妥之处,感谢指正。
本文参考: https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

为了便于下载和整理,已开源放在:
https://github.com/honlu/GoDailyCode
持续更新中,还包含《代码随想录》Go版代码,Go设计模式等!欢迎star、fork,一起学习和交流!

插入排序:又叫直接插入排序。

描述:(有序区,无序区)

把无序区的第一个元素插入到有序区的合适的位置。
对数组:比较的少,换的多
原理是通过构建有序序列,对于未排序数据,在已排序序列中从后往前扫描,
找到相应位置并插入。

算法步骤:

1、将待排序序列第一个元素看作一个有序序列,将第二个元素到最后一个元素当成是未排序序列
2、从头到尾扫描未排序序列,将扫描到的每一个元素插入到有序序列的适当位置。
注意:(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

稳定

时间复杂度:

最好:O(n)
最坏:O(n^2)
平均:O(n^2)

代码实现

package main

import "fmt"

func insertionSort(arr []int) []int {
	length := len(arr)
	// 第一层循环代表:将1-length的数组看作待排序的序列
	for i := 1; i < length; i++ {
		// 第二层循环:将i插入到合适的位置
		// for j := i - 1; j >= 0; j-- { // 此简单,好理解,还可以优化
		// 	if arr[j] > arr[j+1] { // 升序
		// 		arr[j], arr[j+1] = arr[j+1], arr[j]
		// 	}
		// }
		for j := i - 1; j >= 0 && arr[j] > arr[j+1]; j-- { // 优化,不需要全部遍历已排序,到了相应位置就中断
			arr[j], arr[j+1] = arr[j+1], arr[j]
		}
	}
	return arr
}

func main() {
	var arr []int
	arr = []int{1, 5, 3, 6}
	arr = insertionSort(arr)
	fmt.Println(arr)
}

标签:arr,插入,插入排序,元素,序列,Go,排序,语言版
From: https://www.cnblogs.com/Lusai/p/16791235.html

相关文章

  • Go入坑 io读写
    io读写:1,打开文件2,进行操作3,关闭文件io读:(ps: 示例切片长度小,读取汉字的话,有时候会出现乱码,一般定义为1024的倍数)1packagemain23import(4......
  • Python爬虫之mongodb的聚合操作
    mongodb的聚合操作学习目标了解mongodb的聚合原理掌握mongdb的管道命令掌握mongdb的表达式1mongodb的聚合是什么聚合(aggregate)是基于数据处理的聚合管道,每个文档通过......
  • Python爬虫之mongodb的索引操作
    Mongodb的索引操作学习目标掌握mongodb索引的创建,删除操作掌握mongodb查看索引的方法掌握mongodb创建唯一索引的方法1.为什么mongdb需要创建索引加快查询速度进行数据的......
  • GO语言集成开发工具:GoLand 2022.2.4
    GoLand2022是Mac上强大的GO语言集成开发工具,拥有语法高亮显示,内置终端,内置工具和集成,代码生成,快速导航,重构,语法高亮显示等多种功能,为前段和后端的开发提供了强有力的工具......
  • mangoDB操作指令
    studio3T更新或插入字段:db.getCollection("data_379129").update({},{$set:{'connectedStatus':NumberInt(0),'connectedTime':null}},{multi:true})字段类......
  • 插入排序
    插入排序的原理:将指针指向某元素(一般从第二个元素开始),假设该元素的左侧全部有序,将该元素抽取,然后按照从右往左的顺序分别与其左边的元素进行比较,遇到较大的元素便将较大的......
  • Google Kick Start 2022 --Round C
    Countdown题意给一个长为n的数组,一个数k,求数组中有多少个子串组成k,k-1,k-2....2,1思路扫一遍记录当前期望的值就行了。代码#include<bits/stdc++.h>usingnamespace......
  • 二进制SCA指纹提取黑科技: go语言逆向技术
    二进制SCA指纹提取黑科技:go语言逆向技术​华为云DevCloud软件开发平台在2022华为伙伴暨开发者大会重磅推出了4大新能力,其中的​​二进制成分分析​​安全检测能力,能够实现......
  • 记录go语言 gin 中一个天坑
    1.想写回数据,可以使用context.String或者JSON。2.但如果自己以及marshal了的话,就只能返回String!用JSON去返回的话会导致接收端不能解析。  第二个参数可以是数组或......
  • GO 学习之实现的二分查找算法
    packagemainimport"fmt"varindexintfuncmain(){ //有序数组 vararray=[17]int{2,5,8,14,15,18,19,20,29,34,55,56,57,58,59,60,67} va......