Lapis Lazuli

technical blog for web developer

【Go】Goで競技プログラミング(sortパッケージ)

今回はsortパッケージを使ったのでsortに関して。
ひたすらsliceをsortしたいときにおすすめ。

sliceのソート

sortパッケージは主に型に応じたソート関数が用意されています。

sort.Ints
sort.Strings
sort.Float64s

これを使うだけで昇順にソート完了。これ以外の型を使う場合、sort.Sliceを使う必要があります。
競プロではint64とかを使う機会があるかもしれません。

import  "sort"

func main () {
     numbers := []int64{3, 4, 5, 2, 1}

     sort.Slice(numbers, func(i, j int) bool {
        return numbers[i] < numbers[j]
    })
}

第2引数に渡した関数で第1引数のsliceをソートしています。
sort.Sliceを応用すれば他の型はもちろん、ソートの順序も変えられるので柔軟性の高い関数だと思います。
ちなみに第1引数の型がinterfaceなので型が混ざっててもいけます。intとstringがある構造体でも問題ありません。
sortパッケージに関してはこのあたりが使えれば問題ないんじゃないでしょうか。
安定ソートをしたい場合はSliceStableを使いましょう。
ちなみに安定ソートとは、ざっくり言うとソート前の並びがソート後も保存されるソートらしいです。
が、使ったことないので詳しくはわかりません・・・