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-插入排序的主要内容,如果未能解决你的问题,请参考以下文章