
- •«Национальный исследовательский томский политехнический университет»
- •Разработка программы сортировки элементов массива
- •Алгоритмы сортировки
- •Метод пузырька (обменная сортировка с выбором)
- •Сортировка выбором
- •Сортировка методом Шелла
- •Другие алгоритмы сортировки. Сравнение алгоритмов
- •Операторы циклов
- •Оператор цикла while
- •Оператор цикла for
- •Оператор цикла do while
- •Вложенные циклы
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Национальный исследовательский томский политехнический университет»
Учебно-методические указания к
лабораторной работе №7 по курсу Информатика
Разработка программы сортировки элементов массива
Томск 2011 г.
СОДЕРЖАНИЕ
1Алгоритмы сортировки 4
1.1Метод пузырька (обменная сортировка с выбором) 4
1.2Сортировка выбором 7
1.3Сортировка методом Шелла 7
1.4Другие алгоритмы сортировки. Сравнение алгоритмов 8
2Операторы циклов 9
2.1Оператор цикла while 11
2.2Оператор цикла for 12
2.3Оператор цикла do while 14
2.4Вложенные циклы 15
ВВЕДЕНИЕ
Данные учебно-методические указания содержат теоретический материал необходимый для выполнения лабораторной работы №7 «Разработка программы сортировки элементов массива» по курсу Информатика для бакалавров направления 140800 «Ядерные физика и технологии». В частности, рассматриваются понятие «сортировки» данных, некоторые методы сортировки и их сравнение по времени выполнения данной процедуры.
-
Алгоритмы сортировки
Очень часто при обработке данных требуется их отсортировать, иначе говоря, упорядочить их определенным образом. Сортировка применяется в очень многих областях, будь то математические программы для расчетов или базы данных.
Существует множество различных методов сортировки данных, которые подробнейшим образом описаны в классической работе Д. Кнута "Искусство программирования для ЭВМ". Причем для разных типов данных иногда целесообразно применять разные методы сортировки. Но, тем не менее, практически каждый алгоритм сортировки можно разбить на три части:
-
сравнение, определяющее упорядоченность пары элементов;
-
перестановку, меняющую местами пару элементов;
-
собственно сортирующий алгоритм, который осуществляет сравнение и перестановку элементов до тех пор, пока все элементы множества не будут упорядочены.
Подобными свойствами обладают и те наиболее часто используемые алгоритмы сортировки, которые будут рассмотрены ниже.
-
Метод пузырька (обменная сортировка с выбором)
Идея этого метода отражена в названии. Самые легкие элементы массива “всплывают” наверх, самые “тяжелые” – тонут.
Алгоритмически это можно реализовать следующим образом: будем просматривать весь массив “снизу вверх” (от первого элемента к последнему) и менять стоящие рядом элементы в том случае, если “нижний” элемент меньше, чем “верхний”. Таким образом, мы вытолкнем наверх самый “легкий” элемент всего массива. Теперь повторим всю операцию для оставшихся неотсортированными первых N-1 элементов (т.е. для тех, которые лежат “ниже” первого). В результате второй по величине “пузырек” встанет на свое место (второе с конца).
Очевидно, что такую процедуру необходимо проделать N-1 раз, так как в тот момент, когда (N-1)ый по счету элемент попадет на свое место, последний из сортируемых автоматически окажется на первом месте.
Пример: дана D – последовательность из 5 (N=5) чисел, которую и будем сортировать по убыванию.
D: 10 3 -1 4 15
d1 d2 d3 d4 d5
1) Задаем k=1 (должен "всплыть" первый "пузырек").
1.1. Задаем i=1; проверяем условие i N-k, т.е. 15-1? – да, значит, будем сравнивать di и di+1, т.е. d1 и d2: 10<3? – нет, поэтому d1 и d2 местами не меняем.
D: 10 3 -1 4 15
d1 d2 d3 d4 d5
1.2. Задаем i=2; проверяем условие 25-1? – да, значит, будем сравнивать d2 и d3: 3<-1? – нет, поэтому d2 и d3 местами не меняем.
D: 10 3 -1 4 15
d1 d2 d3 d4 d5
1.3. Задаем i=3; проверяем условие 35-1? – да, значит, будем сравнивать d3 и d4: -1<4? – да, поэтому d3 и d4 меняем местами.
D: 10 3 4 -1 15
d1 d2 d3 d4 d5
1.4. Задаем i=4; проверяем условие 45-1? – да, значит, будем сравнивать d4 и d5: -1<15? – да, поэтому d4 и d5 меняем местами.
D: 10 3 4 15 -1
d1 d2 d3 d4 d5
1.5. Задаем i=5; проверяем условие 55-1? – нет, значит, мы закончили проверять неотсортированную часть. Действительно, самое маленькое число (-1) встало на последнее место, т.е. первый "пузырек" "всплыл".
2) Задаем k=2 (должен "всплыть" второй "пузырек").
2.1. Задаем i=1; проверяем условие i N-k, т.е. 15-2? – да, значит, будем сравнивать di и di+1, т.е. d1 и d2: 10<3? – нет, поэтому d1 и d2 местами не меняем.
D: 10 3 4 15 -1
d1 d2 d3 d4 d5
2.2. Задаем i=2; проверяем условие 25-2? – да, значит, будем сравнивать d2 и d3: 3<4? – да, поэтому d2 и d3 меняем местами.
D: 10 4 3 15 -1
d1 d2 d3 d4 d5
2.3. Задаем i=3; проверяем условие 35-2? – да, значит, будем сравнивать d3 и d4: 3<15? – да, поэтому d3 и d4 меняем местами.
D: 10 4 15 3 -1
d1 d2 d3 d4 d5
2.4. Задаем i=4; проверяем условие 45-2? – нет, значит, мы закончили проверять неотсортированную часть. Действительно, второе по величине маленькое число (3) встало на предпоследнее место, т.е. второй "пузырек" "встал" на свое место.
Далее повторяем все действия при k=3, и т.д. до полного упорядочивания последовательности.
Блок-схема данного алгоритма приведена на рисунке 1.
Рисунок 1 – Блок-схема сортировки последовательности по убыванию значений методом пузырька
Как видно, алгоритм достаточно прост, но, как иногда замечают, он является непревзойденным в своей неэффективности. Очевидно, что данный алгоритм можно несколько “модернизировать”, добавив во внутреннем цикле проверку “была ли хоть одна перестановка?”, а во внешнем проверять её результат (если ни одной перестановки не было – значит, последовательность уже упорядочена). Таким образом, можно избавиться от лишнего выполнения внешнего цикла, сократив тем самым общее количество действий, а следовательно, и время выполнения.