Ответ Дмитрия будет работать для любого типа, который может быть неявно преобразован в Ordered[T]
.Это немного странно, и в идиоматическом Scala люди часто предпочитают использовать неявное Ordering
.Таким образом, порядок полностью отделен от реализации T
.
def qsort[T : Ordering](list: List[T]): List[T]
. В подписи используется контекстная привязка, а [T: Ordering]
является синтаксическим сахаром для более подробного
def qsort[T](list: List[T])(implicit ev: Ordering[T]): List[T]
Если вы пришли с Java, Ordering
означает Ordered
, что Comparator
означает Comparable
.Обратите внимание, что Ordering[T]
по духу очень похож на T => Ordered[T]
, но я думаю, что проще обернуть голову, когда вы начинающий.Это также дает вам хороший набор методов для создания и управления Ordering
s.
Наконец, обратите внимание, что использование List
для метода сортировки, такого как быстрая сортировка, приведет к очень плохой производительности, потому что добавление к List
равно O(n)
.Если производительность является проблемой, используйте Array
с реализацией быстрой сортировки на месте.