Допустим, нужно отсортировать массив, но порядок элементов должен определяться не возрастанием или убыванием значения, а любой другой операцией или функцией. Делается это элементарно:

sort.Slice(A, func(i, j int) bool {
	return A[i] & 1 == 0
})

Функция sort.Slice представляет из себя алгоритм quicksort (быстрой сортировки), в который дополнительно передаётся функция, которая будет отвечать за сравнение элементов. В данном случае функция проверяет число на чётность и чётные числа размещает до нечётных без учёта возрастания или убывания самого значения.

Также в Golang есть функция sort.SliceStable, которая работает аналогично, только внутри неё реализован алгоритм сортировки вставками (insertion sort), который имеет вычислительную сложность O(n*n), что гораздо медленнее, чем quicksort с вычислительной сложностью в среднем O(n log n).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Любишь мемасики?

Подпишись на мой телеграм-канал!

Открыть
Закрыть