Как в Golang сделать сортировку по пользовательской функции

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

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).