diff --git a/langext/sort.go b/langext/sort.go new file mode 100644 index 0000000..ef68fa8 --- /dev/null +++ b/langext/sort.go @@ -0,0 +1,39 @@ +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]) + }) +}