initial commit
This commit is contained in:
72
pkg/array/sort.go
Normal file
72
pkg/array/sort.go
Normal file
@@ -0,0 +1,72 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user