go常见排序送给大家,自己手写的,个人原创

少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述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)

    推荐阅读