73 lines
1.3 KiB
Go
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
|
|
}
|