Сортировка в стандартном пакете Go

Пакет sort содержит всё необходимое для практической сортировки.

Самый удобный способ — сортировка через функцию-компаратор:

import "sort"

people := []struct{ Name string; Age int }{
    {"Alice", 30}, {"Bob", 25}, {"Carol", 35},
}

// По возрасту
sort.Slice(people, func(i, j int) bool {
    return people[i].Age < people[j].Age
})

// По имени в обратном порядке
sort.Slice(people, func(i, j int) bool {
    return people[i].Name > people[j].Name
})

sort.SliceStable сохраняет исходный порядок равных элементов.

Для повторного использования — реализуйте интерфейс sort.Interface:

type ByAge []Person

func (a ByAge) Len() int           { return len(a) }
func (a ByAge) Less(i, j int) bool { return a[i].Age < a[j].Age }
func (a ByAge) Swap(i, j int)      { a[i], a[j] = a[j], a[i] }

sort.Sort(ByAge(people))
nums := []int{5, 2, 8, 1, 9}
sort.Ints(nums)              // [1 2 5 8 9]

words := []string{"banana", "apple", "cherry"}
sort.Strings(words)          // [apple banana cherry]

// Проверка отсортированности
sort.IntsAreSorted(nums)     // true

// Бинарный поиск в отсортированном срезе
i := sort.SearchInts(nums, 5) // индекс первого элемента >= 5
// Найти первый индекс, где условие выполняется
i := sort.Search(len(nums), func(i int) bool {
    return nums[i] >= 8
})
// i == 3 (nums[3] == 8)

ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2easy
3Упражнение 3medium