Go-插入排序

Posted 洪城浪子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go-插入排序相关的知识,希望对你有一定的参考价值。

Go语言之简单算法的实现——插入排序算法

  • Go语言之简单算法的实现——插入排序算法

    • 1、直接插入排序算法

1、直接插入排序算法

1.1 直接插入排序升序算法(以空间节省时间)

  • 普通查找方式
/** * 直接插入排序升序算法(以空间节省时间) * 优点: 实现简单,新建切片存储排序后结果,能节省数组元素移动的时间 * 缺点: 增大空间开销 * 空间复杂度: O(2n) * 时间复杂度: O(n^2) * Author: ncuwen */func DirectInsertionSort1(point []float32) []float32 { var result = make([]float32, 0, len(point)) for _, v := range point { reSize := len(result) index := 0 for j := reSize - 1; j >= 0; j-- { if v > result[j] { index = j + 1 break } } temp := append([]float32{}, result[index:]...) result = append(result[:index], v) result = append(result, temp...) } return result}
  • 二分查找方式
/** * 二分插入排序升序算法(以空间节省时间) * 优点: 实现简单,新建切片存储排序后结果,能节省数组元素移动的时间,并且使用二分递归查找方式寻找插入位置,节省空间 * 缺点: 增大空间开销 * 空间复杂度: O(2n) * 时间复杂度: O(n^2) * Author: ncuwen */func BinaryInsertionSort(point []float32) []float32 { var result = make([]float32, 0, len(point)) for _, v := range point { index := BinarySearchFirstGreaterByRecursive(result, v) temp := append([]float32{}, result[index:]...) result = append(result[:index], v) result = append(result, temp...) } return result}

tips: 二分查找算法见 Go语言之简单算法的实现——查找算法

1.2 直接插入排序升序算法(以时间节省空间)

/** * 直接插入排序升序算法(以时间节省空间) * 优点: 实现简单, 直接在原切片上进行处理,能节省空间 * 缺点: 增大时间开销,需要移动元素 * 空间复杂度: O(n) * 时间复杂度: O(n^2) * Author: ncuwen */func DirectInsertionSort2(point []float32) { var j = 0 for i := 1; i < len(point); i++ { tmp := point[i] for j = i; j > 0 && tmp < point[j-1]; j-- { point[j] = point[j-1] } point[j] = tmp }}


以上是关于Go-插入排序的主要内容,如果未能解决你的问题,请参考以下文章

go语言实现排序算法

Go语言实现冒泡排序选择排序快速排序及插入排序的方法

Go语言冒泡选择插入快速排序实战浅析

排序算法总结 go实现代码

排序02-直接插入排序法

直接插入排序(go实现)