Алгоритм сортировки методом вставки (C#, параметризированный класс). |
Автор megabax | |||||||||||||
12.11.2012 г. | |||||||||||||
Алгоритм сортировки методом вставки (C#, параметризированный класс).Исходники к уроку можно скачать здесь. Сегодня мы рассмотрим алгоритм сортировки методом вставки. В отличии от сортировки методом пузырька и отбора, в этом алгоритме количество сравнений зависит исходной упорядоченности массива. Если список уже отсортирован (наилучший случай) то количество сравнений равно n-1, если отсортирован в обратном порядке (наихудший случай), то сравнений будет (1/2)*(n2+n). В среднем же случае количество сравнений равно (1/4)*(n2+n). Суть алгоритма в следующем: На первом шаге сортируем первые два элемента. Затем вставляем третий элемент к этим двум элементам в соответствии с его порядковой позиций. Затем в этот список таким же макаром вставляем четвертый элемент и так далее. Например, пусть у нас имеется вот такой список чисел: 3,2,5,1,8. Вот как будет происходить сортировка:
Как видим, в любом случае алгоритм сделает n-1 проходов, и, в уже отсортированном массиве количество сравнений равно столько же. Если массив требуется сортировать, то количество сравнений будет возрастать, при чем тем больше, чем несортированней массив. Как видим, данный алгоритм ведет себя естественно - уже отсортированный массив или его часть не сортирует, а наибольшее количество итераций делает для массива, который отсортирован в порядке, обратном требуемому. А сейчас мы реализуем данный алгоритм на C#. Для этого создадим параметризированный класс Sort:
Таким образом, имея параметризируемый класс, мы можем сортировать любые данные, поддерживающие интерфейс IComparer. Проиллюстрируем это на пример сортировки массива числе и строк. Для начала создадим форму: И для иллюстрации работы наших алгоритмов напишем вот такой пример:
Все, теперь мы можем протестировать работу алгоритма: Исходники к уроку можно скачать здесь. |
|||||||||||||
Последнее обновление ( 12.11.2012 г. ) |