2010-07-10 4 views

ответ

10

Ответ на ваш вопрос: unstable.

Первый ResizeArray.sortBy реализуется как:

module ResizeArray = 
    let sortBy f (arr: ResizeArray<'T>) = arr.Sort (System.Comparison(fun x y -> compare (f x) (f y))) 

И ResizeArray является псевдонимом для коллекции .Net List:

type ResizeArray<'T> = System.Collections.Generic.List<'T> // alias 

Теперь давайте посмотрим на List documentation:

Этот метод использует Array.Sort, который использует QuickSort algor ithm. Эта реализация выполняет нестабильную сортировку ; то есть, если два элемента равны , их порядок может не быть сохранен. Напротив, устойчивый сорт сохраняет порядок элементов, равный .

Нестабильный. Если вы хотите стабильный сортировать, вы можете реализовать сортировку слияния или осторожную сортировку. Однако быстрая сортировка стабильной версии менее эффективна.

+0

Спасибо. Это хороший теоретический ответ. Легче использовать доступный Seq.sortBy в соответствии с ответом Брайана. –

Смежные вопросы