09 Golang sort排序

learninginto · · 372 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

选择排序
var numSlice = []int{9,8,7,6,5}
for i := 0; i < len(numSlice); i++ {
    for j := i + 1; j < len(numSlice); j++ {
        if numSlice[i] > numSlice[j] {
            temp := numSlice[i]
            numSlice[i] = numSlice[j]
            numSlice[j] = temp
        }
    }
}
fmt.Println(numSlice)
冒泡排序
var numSlice = []int{9,8,7,6,5}
for i := 0; i < len(numSlice); i++ {
    for j := i; j < len(numSlice) - 1 - i; j++ {
        if numSlice[j] > numSlice[j + 1] {
            temp := numSlice[j]
            numSlice[j] = numSlice[j + 1]
            numSlice[j + 1] = temp
        }
    }
}
二叉树实现插入排序
type tree struct {
    value int
    left, right *tree
}

//Sort排序
func Sort(values []int) {
    var root *tree 
    for _, v := range values {
        root = add(root, v)//将切片中的数值植入root中
    }
    appendValue(values[:0], root)
}

//通过root的数据来重新拼接slice
func appendValue(values []int, t *tree) []int {
    if t != nil {
        values = appendValue(values, t.left)
        values = append(values, t.value)
        values = appendValue(values, t.right)
    }
    return values
}

func add(t *tree, value int) *tree {
    if t == nil { //第一层(中间层)或者树的末端
        t = new(tree) //new(tree)返回的是一个*tree,是一个地址
        t.value = value
        return t
    }
    //递归比较
    if value < t.value {
        t.left = add(t.left, value)//比树根小,往左边下移
    } else {
        t.right = add(t.right, value)//比树根大,往右边下移
    }
    return t
}

func main(){
    x := []int {5,7,1,6,9,8,2,4,3}
    Sort(x[:])
    fmt.Println(x)
}
sort排序

对于int、float64和string数组或是切片的排序,go分别提供了sort.Ints()、sort.Float64s()和sort.Strings()函数,默认都是从小到大(升序)排序。

import "sort"
intList := []int{2,4,3,5}
float8List := []float{2.1,4.1,3.1,5.1}
stringList := []string{"a","c","b"}
sort.Ints(intList)
sort.Float64s(float8List)
sort.Strings(stringList)
  • sort降序排序

Golang的sort包可以使用sort.Reverse(slice)来调换slice.Interface.Less,也就是比较函数。

sort.Sort(sort.Reverse(sort.IntSlice(intList)))
sort.Sort(sort.Reverse(sort.Float64Slice(float8List)))
sort.Sort(sort.Reverse(sort.StringSlice(stringList)))

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:learninginto

查看原文:09 Golang sort排序

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

372 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传