少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述go常见排序送给大家,自己手写的,个人原创相关的知识,希望能为你提供帮助。
??https://github.com/zhangliu520/go_excises/blob/main/practise.go?
冒泡,堆栈,快排,选择等等
【go常见排序送给大家,自己手写的,个人原创】?
package main
import (
"fmt"
"math/rand"
)
//从小到大
type SF struct {
SArray []int
}
//冒泡
func (sf *SF) Bubble() []int {
length := len(sf.SArray)
for o := 0; o < length; o++ {
for i := 0; i < length-o-1; i++ {
if sf.SArray[i] > sf.SArray[i+1] {
sf.SArray[i], sf.SArray[i+1] = sf.SArray[i+1], sf.SArray[i]
}
}
}
return sf.SArray
}
//选择
func (sf *SF) Choice() []int {
length := len(sf.SArray)
for o := 0; o < length; o++ {
mimum := o
for i := o; i < length; i++ {
if sf.SArray[mimum] > sf.SArray[i] {
mimum = i
}
}
sf.SArray[o], sf.SArray[mimum] = sf.SArray[mimum], sf.SArray[o]
}
return sf.SArray
}
//插入
func (sf *SF) Insert() []int {
length := len(sf.SArray)
if length == 1 {
return sf.SArray
}
for o := 1; o < length; o++ {
for i := o - 1; i < = o; i-- {
if sf.SArray[i] > sf.SArray[i+1] {
sf.SArray[i], sf.SArray[i+1] = sf.SArray[i+1], sf.SArray[i]
} else {
break
}
}
}
return sf.SArray
}
func (sf *SF) pop(index int, sl []int) (int, []int) {
a := sl[index]
return a, append(sl[:index], sl[index+1:]...)
}
//快排
func (sf *SF) QuickSort(SArray []int) []int {
length := len(SArray)
if length < 2 {
return SArray
}
middle := int(length / 2)
value, SList := sf.pop(middle, SArray)
leftList := []int{}
rightList := []int{}
for _, i := range SList {
if i < value {
leftList = append(leftList, i)
} else {
rightList = append(rightList, i)
}
}
leftListIncursion := sf.QuickSort(leftList)
rightListIncursion := sf.QuickSort(rightList)
return append(append(leftListIncursion, value), rightListIncursion...)
}
//合并
func (sf *SF) Merge(SArray []int) []int {
length := len(SArray)
推荐阅读
- VRRP
- (副本)额外域降级报错对应
- vrrp技术专题
- 树莓派之--Windowns下安装树莓派系统到SD卡
- [C语言] 最小公倍数
- Office365混合部署进阶系列教程二(混合环境下的PTA直通身份认证)
- 『数据结构与算法』稀疏数组(这样来节省存储空间)
- 性能工具之Taurus入门(安装篇)
- 面试官(不会真有人不知道什么是线程池吧())