Files
base/pkg/array/sort.go
2026-04-10 18:25:21 +03:30

73 lines
1.3 KiB
Go

package array
import "sort"
type Numbers interface {
int | int8 | int16 | int32 | int64 | float32 | float64
}
// BubbleSort
// Deprecated; use sort package
func BubbleSort[T any, N Numbers](arr []T, selector func(val T) N) {
n := len(arr)
for i := 0; i < n-1; i++ {
for j := 0; j < n-i-1; j++ {
c := selector(arr[j])
n := selector(arr[j+1])
if c > n {
// swap arr[j] and arr[j+1]
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
}
// BubbleSortDesc
// Deprecated; use sort package
func BubbleSortDesc[T any](arr []T, selector func(val T) float64) {
n := len(arr)
for i := 0; i < n-1; i++ {
for j := 0; j < n-i-1; j++ {
c := selector(arr[j])
n := selector(arr[j+1])
if c < n { // Change comparison operator to less than
// swap arr[j] and arr[j+1]
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
}
func FindDifference[T Numbers](primary, secondary []T) []T {
m := make(map[T]struct{})
for _, num := range secondary {
m[num] = struct{}{}
}
var diff []T
for _, num := range primary {
if _, found := m[num]; !found {
diff = append(diff, num)
}
}
return diff
}
func SortIntMap[T any](m map[int]T) []T {
result := make([]T, 0, len(m))
keys := make([]int, 0, len(m))
for k := range m {
keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
result = append(result, m[k])
}
return result
}