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  }