github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/slices/sort.go (about) 1 // Copyright 2023 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:generate go run $GOROOT/src/sort/gen_sort_variants.go -generic 6 7 package slices 8 9 import ( 10 "github.com/shogo82148/std/cmp" 11 ) 12 13 // Sort は、任意の順序付け可能な型のスライスを昇順にソートします。 14 // 浮動小数点数をソートする場合、NaN は他の値の前に並べられます。 15 func Sort[S ~[]E, E cmp.Ordered](x S) {} 16 17 // SortFunc は、cmp 関数によって決定される昇順でスライス x をソートします。 18 // このソートは安定であることは保証されません。 19 // cmp(a, b) は、a < b の場合は負の数、a > b の場合は正の数、a == b の場合はゼロを返す必要があります。 20 // 21 // SortFunc は、cmp が厳密な弱順序であることを要求します。 22 // https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings を参照してください。 23 func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int) {} 24 25 // SortStableFunc は、cmp 関数によって決定される順序でスライス x をソートします。 26 // このソートは安定であり、等しい要素の元の順序を維持します。 27 // cmp(a, b) は、a < b の場合は負の数、a > b の場合は正の数、a == b の場合はゼロを返す必要があります。 28 // 29 // SortStableFunc は、cmp が厳密な弱順序であることを要求します。 30 // https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings を参照してください。 31 func SortStableFunc[S ~[]E, E any](x S, cmp func(a, b E) int) {} 32 33 // IsSorted は、x が昇順にソートされているかどうかを報告します。 34 func IsSorted[S ~[]E, E cmp.Ordered](x S) bool { return false } 35 36 // IsSortedFunc は、x が昇順にソートされているかどうかを報告します。 37 // このソートは、cmp 関数によって定義された比較関数によって行われます。 38 func IsSortedFunc[S ~[]E, E any](x S, cmp func(a, b E) int) bool { return false } 39 40 // Min は、x 内の最小値を返します。x が空の場合は panic を発生させます。 41 // 浮動小数点数の場合、Min は NaN を伝播します(x 内の任意の NaN 値は、出力を NaN にします)。 42 func Min[S ~[]E, E cmp.Ordered](x S) E { var zero E; return zero } 43 44 // MinFunc は、cmp 関数によって比較された x 内の最小値を返します。 45 // x が空の場合、MinFunc は panic を発生させます。 46 // cmp 関数によって複数の最小要素がある場合、MinFunc は最初の要素を返します。 47 func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E { var zero E; return zero } 48 49 // Max は、x 内の最大値を返します。x が空の場合は panic を発生させます。 50 // 浮動小数点数の場合、Max は NaN を伝播します(x 内の任意の NaN 値は、出力を NaN にします)。 51 func Max[S ~[]E, E cmp.Ordered](x S) E { var zero E; return zero } 52 53 // MaxFunc は、cmp 関数によって比較された x 内の最大値を返します。 54 // x が空の場合、MaxFunc は panic を発生させます。 55 // cmp 関数によって複数の最大要素がある場合、MaxFunc は最初の要素を返します。 56 func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E { var zero E; return zero } 57 58 // BinarySearch は、ソートされたスライス内で target を検索し、target が見つかる位置、 59 // またはソート順序で target が表示される位置を返します。 60 // また、スライス内に target が本当に見つかったかどうかを示す bool も返します。 61 // スライスは昇順にソートする必要があります。 62 func BinarySearch[S ~[]E, E cmp.Ordered](x S, target E) (int, bool) { return 0, false } 63 64 // BinarySearchFunc は、カスタム比較関数を使用して [BinarySearch] と同様に動作します。 65 // スライスは、cmp によって定義される増加順でソートする必要があります。 66 // cmp は、スライス要素がターゲットに一致する場合は 0、スライス要素がターゲットよりも前の場合は負の数、 67 // スライス要素がターゲットよりも後ろの場合は正の数を返す必要があります。 68 // cmp は、スライスと同じ順序付けを実装する必要があります。つまり、 69 // cmp(a, t) < 0 かつ cmp(b, t) >= 0 の場合、a はスライス内で b よりも前になければなりません。 70 func BinarySearchFunc[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool) { 71 return 0, false 72 }