Как вызывается метод Icomparer.Compare () при реализации сортировки?

1
  • Кто называет метод Icomparer.Compare()?

Рассмотрим следующий пример.

Array.Sort(Myfiles, new customSort())
.
.
.
private class customSort : IComparer<object>
{
 public override int Compare(obj A, obj B)
 {
   return (A.Value==B.Value?(0):((A.Value < B.Value)?(-1):(1)));
 }
}

Если Myfiles содержит коллекцию объектов,

  • Как решаются А и В.
  • Являются ли последовательные объекты A и B в коллекции Myfiles?
  • Если нет, то как A и B выбраны из Myfiles?
  • Может ли метод Array.Sort() делать с ним что-нибудь?
  • 0
    Пожалуйста, не редактируйте свой пост, если вы хотите задать другой вопрос. Просто создайте новый.
Теги:
sorting
icomparer
compare

3 ответа

1
Лучший ответ

Этот метод использует алгоритм интроспективного сортировки (introsort) следующим образом:

  • Если размер раздела меньше 16 элементов, он использует алгоритм сортировки вставки.
  • Если количество разделов превышает 2 * LogN, где N - диапазон входного массива, он использует алгоритм Heapsort.
  • В противном случае он использует алгоритм Quicksort.

С http://msdn.microsoft.com/en-us/library/kwx6zbd4.aspx

Для первого варианта здесь хороший gif: http://en.wikipedia.org/wiki/Insertion_sort#mediaviewer/File:Insertion-sort-example-300px.gif

1

Это зависит от алгоритма сортировки. Когда алгоритм должен сравнивать два объекта, чтобы определить их относительный порядок, он вызывает метод Compare.

Для таких алгоритмов, как Bubblesort A и B, будут соседями, для чего-либо еще, о чем я могу думать прямо сейчас, они могут быть любыми объектами в коллекции.

0

Очевидно, что вызов происходит в методе Sort. Все остальные вопросы относятся к внутренней реализации метода Sort. Хотя вы можете заглянуть внутрь реальной логики, вы не должны нормально беспокоиться, так как вас интересует только конечный результат (т.е. Ваш массив сортируется).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню