Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Алгоритм сортировки простыми вставками является непосредственной реализацией идеи сортировки вставками-

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 1.12.2024

24.

Алгоритм сортировки простыми вставками является непосредственной реализацией идеи сортировки вставками: очередная запись вставляется среди ранее отсортированных записей [2, 5 10, 19, 26, 31, 43]

К этому шагу первые i записей исходного массива уже отсортированы и на рисунке помечены серым цветом. Запись k(i) необходимо вставить на соответствующую позицию в отсортированной части массива. С этой целью значение k(i) сохраняется во вспомогательной переменной temp. Затем последовательно сравниваются k(j), j = i – 1, …, 0, со значением temp до тех пор, пока k(j) > temp, при этом каждый раз значение k(j) присваивается записи k(j + 1). В результате находится такое p, что k(p) ≤ temp, либо значение temp меньше любого из k(j) (в этом случае p = – 1). Шаг алгоритма завершается размещением значения записи temp в элемент массива k(p + 1).

Реализация на языке С++ алгоритма сортировки простыми вставками на примере n записей типа T, хранящихся в массиве k, представлена в листинге 1. Комментарии в правой части листинга содержат число выполнения соответствующей строки алгоритма и поясняют оценку его вычислительной сложности. В формулах через ui обозначено число записей k(j), j = 0, 1, ..., i – 1, которые больше записи k(i), то есть составляют с ней инверсию.

Листинг 1. Алгоритм сортировки простыми вставками

template <typename T>

void SortInsert(T * k, int n) {

T temp;

int j;

for (int i = 1; i < n; ++i) { //n 1

temp = k[i]; //n 1

for (int j = i - 1; j > -1 && k[j] > temp; --j)

k[j + 1] = k[j];

k[j + 1] = temp; //n 1

}

}

Вычислительная сложность алгоритма

Вычислительная сложность алгоритма определяется общим числом операций, выполняемых алгоритмом. Сложив вклады всех строк, получим

Минимальная вычислительная сложность алгоритма соответствует сортировке изначально упорядоченной последовательности и определяется величиной O(n). Максимальная вычислительная сложность O(n2) получается в случае сортировки последовательности, упорядоченной в противоположном порядке.

Устойчивость алгоритма обеспечивается проверкой условия k[j] > temp (см. листинг 1), в результате чего k(j) разместится в конце серии равных ему элементов отсортированной части массива, то есть взаимное расположение равных элементов после выполнения сортировки не изменится. В случае проверки условия k[j] >= temp алгоритм будет неустойчив.

Модификации алгоритма

  1.  1. Время работы алгоритма можно несколько сократить, если размещать элементы в массиве, начиная с k(1). В элемент k(0) (вместо temp) заносится текущая вставляемая запись k(i). При вставке элемента в цикле по j отпадает необходимость проверки условия j > -1. Такая модификация алгоритма носит название метода барьеров.
  2.  2. Вычислительную сложность сортировки вставками можно также уменьшить, используя двоичный поиск для нахождения нужной позиции для k(i) в отсортированной части массива k(0), k(1), ..., k(i - 1). Сравним k(i) с записью, расположенной в середине отсортированной части; если k(i) меньше, то позиция для k(i), очевидно, находится в левой её половине; если больше, то в правой. Производим аналогичные действия с выбранной половиной отсортированной части массива и так до тех пор, пока её размер не станет равным 1, в этом случае позиция найдена. Это сокращает число сравнений с O(n2) до O(nlog n). Однако даже если позиция p для k(i) найдена за O(log n) шагов, каждый из элементов k(p + 1), k(p + 2), ..., k(i - 1) должен быть сдвинут на одну позицию вправо. Эта операция, выполняемая n раз, требует O(n2) перемещений. Таким образом, двоичный поиск не позволяет уменьшить порядок зависимости вычислительной сложности от n.
  3.  3. Еще один приём, позволяющий сократить время работы алгоритма простых вставок, заключается в следующем. Можно располагать отсортированную часть массива не в начале, а в середине массива, и двигать записи в ту сторону, где их меньше (в описанном выше


алгоритме записи сдвигались всегда вправо). Это позволяет сэкономить примерно половину времени работы. Такая модификация алгоритма сортировки простыми вставками называется двухпутевыми вставками.

  1.  4. Алгоритм сортировки простыми вставками можно применить к данным, хранящимся в виде линейного связного двунаправленного списка. В этом случае число сравнений остается прежним, а число присваиваний сокращается, поскольку вставка элемента в отсортированную часть списка не требует поэлементного сдвига, а осуществляется путем изменения значений указателей.
  2.  5. Алгоритм сортировки простыми вставками можно применить к данным, хранящимся в виде линейного связного однонаправленного списка. В этом случае каждый элемент сортируемого списка вставляется во вновь создаваемый упорядоченный однонаправленный список. Число сравнений – прежнее, а число присваиваний определяется величиной O(n).

Следует отметить, что алгоритм простых вставок выгодно использовать для файлов небольшого размера. Кроме этого, он пригоден для сортировки больших файлов, но с малым числом инверсий.




1. Задание 1 1.10.04
2. МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ К ИЗУЧЕНИЮ ТЕМЫ
3. тема неисчерпаемая
4. і XX ~асырды~ басында ~аза~тар орыстар украиндар ~лке хал~ыны~ 87 нан 95 на дейін ~~рады
5. Математические методы в решении экономических задач
6. Теоретические и методологические основы государственного управления 1.html
7. Производственная программа на примере ООО Тихий Дон
8. Кениантроп
9. Австралийский Союз
10. Парадокс близнецов
11. Стратегический менеджмент фармацевтической сети
12. Япония (из словаря)
13. Реферат- Биографические нарративы советской эпохи
14. Ленинградская битва
15. ФЭРИВ книгу Русская расовая теория до 1917 года составитель Владимир Авдеев Посмотрите черепа с так
16. конспект лекцій КНЕУ Поддєрьогін 1.html
17. Ненасилие как убеждение и поступок
18. тематическое моделирование в экономике Тема 1
19. Анализ финансового положения СПК дружба
20. Тесь начальник службы безопасности Место жительства- г