package langext import "sort" func Sort[T OrderedConstraint](arr []T) { sort.Slice(arr, func(i1, i2 int) bool { return arr[i1] < arr[i2] }) } func SortStable[T OrderedConstraint](arr []T) { sort.SliceStable(arr, func(i1, i2 int) bool { return arr[i1] < arr[i2] }) } func IsSorted[T OrderedConstraint](arr []T) bool { return sort.SliceIsSorted(arr, func(i1, i2 int) bool { return arr[i1] < arr[i2] }) } func SortSlice[T any](arr []T, less func(v1, v2 T) bool) { sort.Slice(arr, func(i1, i2 int) bool { return less(arr[i1], arr[i2]) }) } func SortSliceStable[T any](arr []T, less func(v1, v2 T) bool) { sort.SliceStable(arr, func(i1, i2 int) bool { return less(arr[i1], arr[i2]) }) } func IsSliceSorted[T any](arr []T, less func(v1, v2 T) bool) bool { return sort.SliceIsSorted(arr, func(i1, i2 int) bool { return less(arr[i1], arr[i2]) }) } func SortBy[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) { sort.Slice(arr, func(i1, i2 int) bool { return selector(arr[i1]) < selector(arr[i2]) }) } func SortByStable[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) { sort.SliceStable(arr, func(i1, i2 int) bool { return selector(arr[i1]) < selector(arr[i2]) }) } func IsSortedBy[TElem any, TSel OrderedConstraint](arr []TElem, selector func(v TElem) TSel) { sort.SliceStable(arr, func(i1, i2 int) bool { return selector(arr[i1]) < selector(arr[i2]) }) }