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 }