ソートパッケージは、挿入ソート(insertionSort)、マージソート(symMerge)、ヒープソート(heapSort)、クイックソート(quickSort)の4つの基本的なソートアルゴリズムを内部で実装しています。ソートパッケージは、実際のデータに基づいて最適なソートアルゴリズムを自動的に選択します。したがって、コードを作成するときは、sort.Interfaceタイプの実装のみを検討する必要があります。
1. [] intと[]文字列を並べ替えます
主パッケージ のインポート( " FMT " " ソート" ) FUNCメイン(){ // [] INTソート NUMS:= [] INT { 2、31であり、5、6、3。} // 順序 ソート.Ints(NUMS) FMT。 println(" 1:" 、NUMS) // 使用は逆の順序sort.Reverse 替え .Sort(ソート .reverse(ソート.IntSlice(NUMS))) FMT .Println(「:2"NUMS) // []ストリング字符串排序 名:= [] の文字列 { " ABC " " 12 " " KK " " ジョーダン" " コ" " DDは" } // 顺序 ソート.Strings(名前) fmt .Println(" 3:" 、names) // 逆序 sort .Sort(sort .Reverse(sort 。 StringSlice(names)))FMT .Printf(" 4:リバース後:%#1 V \ n " 、名前) // 查找 // [0,100) // 二分查找 NUMS = [] INT { 1、3、5、7、9 } FMT .Println (" 5:"、nums [ sort .SearchInts(nums、8)] == 8 ) fmt .Println(" 6:"、nums [ sort .SearchInts(nums、5)] == 5) } / * $ go run sort.go 1:[2 3 5 6 31] 2:[31 6 5 3 2] 3:[12 DD Jordan Ko abc kk] 4:リバース後:[] string {"kk" 、「abc」、「Ko」、「Jordan」、「DD」、「12」} 5:false 6:true * /
2. sort.Stableを使用して、安定したソートを行います。
sort.Sortは、ソートの安定性を保証しません。必要に応じて、sort.Stableを使用できます。
パッケージメイン インポート( " fmt " " sort " ) タイプperson構造体{ 名前文字列 Age int } タイプpersonSlice [] person func(s personSlice)Len()int {return len(s)} func(s personSlice)Swap(i、 j int){s [i]、s [j] = s [j]、s [i]} func(s personSlice)Less(i、j int)bool {return s [i] .Age < s [j] .Age} func main(){ a: = personSlice { { 名前:"AAA " 、 年齢: 55 、 }、 { 名前:" BBB " 、 年齢: 22 、 }、 { 名前:" CCC " 、 年齢: 0 、 }、 { 名前:" DDD " 、 年齢: 22 、 }、 { 名前:" EEE "、 年齢: 11 、 }、 } sort .Stable(a) fmt .Println(a) }
結果:
$ go run sort - detail.go [{CCC 0 } {EEE 11 } {BBB 22 } {DDD 22 } {AAA 55 }]