|
- package sort
-
- import (
- "sort"
-
- "golang.org/x/exp/constraints"
- )
-
- type Comparer[T any] func(left T, right T) int
-
- type sorter[T any] struct {
- arr []T
- cmp Comparer[T]
- }
-
- func (s sorter[T]) Len() int {
- return len(s.arr)
- }
-
- func (s sorter[T]) Less(i int, j int) bool {
- ret := s.cmp(s.arr[i], s.arr[j])
- return ret < 0
- }
-
- func (s sorter[T]) Swap(i int, j int) {
- s.arr[i], s.arr[j] = s.arr[j], s.arr[i]
- }
-
- func Sort[T any](arr []T, cmp Comparer[T]) {
- st := sorter[T]{
- arr: arr,
- cmp: cmp,
- }
-
- sort.Sort(st)
- }
-
- func CmpBool(left, right bool) int {
- leftVal := 0
- if left {
- leftVal = 1
- }
-
- rightVal := 0
- if right {
- rightVal = 1
- }
-
- return leftVal - rightVal
- }
-
- func Cmp[T constraints.Ordered](left, right T) int {
- if left == right {
- return 0
- }
-
- if left < right {
- return -1
- }
-
- return 1
- }
|