- •Методические указания
- •Операционные системы пк
- •Часть 1
- •Севастополь
- •Требования к оформлению отчета к лабораторной работе
- •Введение
- •Лабораторная работа № 1 Тема: «Основы работы с ос Windows»
- •1.1 Окна ос Windows
- •1.2 Панель задач
- •1.3 Главное меню
- •1.4 Значок Мой компьютер
- •1.5 Контекстное меню
- •1.6 Создание папок и ярлыков
- •1.7 Работа с панелью управления
- •1.8 Завершение работы Windows
- •Лабораторная работа № 2 Тема: «Работа с файловой системой Windows. Стандартные программы Windows»
- •2.1 Папки, ярлыки, файлы
- •2.2 Создание объектов
- •2.3 Запуск программ
- •Лабораторная работа № 3 Тема: «Основы работы с пакетами ms Word и ms Excel»
- •3.1 Панель инструментов и режимы просмотра Microsoft Word
- •3.2 Форматирование текста в редакторе ms Word
- •3.3. Редактор формул в ms Word
- •3.3 Окна редактора, меню и панели инструментов в Excel
- •3.4 Типы данных и форматы представления в Excel
- •3.5 Основные приемы работы в ячейках Excel
- •3.6 Работа с формулами в Excel
- •3.7 Создание диаграмм средствами Excel
- •Часть I 1) Открыть новый документ ms Word
- •Часть II 1) Создать новую книгу ms Excel
- •Лабораторная работа № 4 Тема: «Системы счисления. Формы представления чисел»
- •4.1 Системы счисления
- •4.2 Правила перевода целых чисел
- •4.3 Арифметические операции
- •Лабораторная работа № 5 Тема: «Создание блок-схем алгоритмов в пакете ms Visio»
- •5.1 Основное понятие алгоритма
- •5.2 Блок-схемы алгоритма
- •5.4 Правила применения символов
- •5.4 Создание алгоритмов средствами ms Visio
- •5.5 Создание текстового документа ms Word со схемой алгоритма
- •Лабораторная работа № 6 Тема: «Исследование алгоритмов линейной структуры»
- •6.1 Виды алгоритмических структур
- •6.2 Линейный алгоритмический процесс
- •Лабораторная работа № 7 Тема: «Исследование разветвляющихся алгоритмов»
- •7.1 Разветвляющийся вычислительный процесс
- •7.2 Переключательные алгоритмические процессы
- •Лабораторная работа № 8 Тема: «Исследование алгоритмов циклической структуры»
- •8.1 Цикл с постусловием и с предусловием
- •8.2 Цикл с заданным количеством повторений
- •8.3 Алгоритмы программ с накапливанием
- •Лабораторная работа № 9 Тема: «Разработка алгоритмов, использующих структуру данных массив»
- •Лабораторная работа № 10 Тема: «Разработка алгоритмов, использующих подпрограммы»
- •Лабораторная работа № 11 Тема: «Определение функции сложности алгоритмов»
- •11.1 Функция сложности алгоритма
- •11.2 Виды функции сложности алгоритмов o(I)
- •11.3 Анализ функции сложности по программе
- •Лабораторная работа № 12 Тема: «Исследование рекурсивных и итерационных алгоритмов»
- •12.1 Рекурсия
- •12.2 Итерационные циклы
- •Лабораторная работа № 13 Тема: «Исследование основных алгоритмов сортировок»
- •13.1 Задача сортировки элементов массива
- •13.2 Линейный выбор
- •13.3 Линейный выбор с обменом
- •13.4 Стандартный обмен (метод "пузырька")
- •13.5 Челночная сортировка
- •13.6 Сортировка Шелла
- •13.7 Линейная вставка
- •3.8 Центрированная и двоичная вставки
- •13.9 Быстрая сортировка (метод Хоара)
- •Лабораторная работа № 14 Тема: «Исследование основных алгоритмов поиска»
- •14.1 Последовательный поиск
- •14.2 Бинарный (двоичный) поиск
- •14.3 Интерполяционный поиск
- •Библиографический список
13.9 Быстрая сортировка (метод Хоара)
Метод "пузырька" является не самым эффективным из рассмотренных алгоритмов, поскольку требует большого количества сравнений и обменов. Однако оказалось, что сортировку, основанную на принципе обмена, можно усовершенствовать таким образом, что получится самый хороший из известных на сегодняшний день методов.
Алгоритм быстрой сортировки, предложенный Хоаром, опять-таки использует тот факт, что для достижения наибольшей эффективности желательно производить обмены элементов на больших расстояниях.
Суть метода заключается в следующем. Найдем такой элемент массива, который разобьет весь массив на два подмножества: те элементы, которые меньше делящего элемента, и те, которые по величине не меньше его (т.е. как бы "отсортируем" один элемент, определив его окончательное местоположение).
Далее применим эту же процедуру к более коротким левому и правому подмножествам.
Таким образом, надо реализовать рекурсивный алгоритм, который сортирует элементы множества, начиная с элемента с индексом left и завершая элементом с индексом right. Условие окончания данного алгоритма - совпадение левой и правой границ подмножества (т.е. когда в подмножестве остается один элемент).
Точка деления массива может быть определена следующим образом. Вводятся два указателя i и j, причём вначале а Сравниваются i-й и j-й элементы и, если обмен не требуется, то j=j-1 и этот процесс повторяется. После первого обмена i увеличивается на единицу (i=i+1) и сравнения продолжаются с увеличением i до тех пор, пока не произойдёт ещё один обмен. Тогда опять уменьшим j и т.д. пока не станет i=j. К моменту, когда i=j элемент ai займёт свою окончательную позицию, так как слева от него не будет больших элементов, а справа - меньших. Таким образом, поставленная задача решена.
Для повышения эффективности быстрой сортировки можно использовать следующий приём: не применяя рекурсивной процедуры к ставшему коротким подмножеству, для его сортировки перейти к другому методу, например, челночной сортировке. То есть рекурсивная процедура применяется только для массивов, длина которых не менее определённого размера.
Пример 13.1. Упорядочить одномерный массив по возрастанию методом обмена. Фрагмент решения данной задачи представлено на рис.13.1а.
Пример 13.2. Рассмотрим задачу сортировки одномерного массива длины n методом обмена в порядке обменов.
При упорядочении можно использовать следующими правилами: числа сравниваются попарно: первое со вторым; второе с третьим; … , i-е с (i + 1); если меньшее стоит в паре на втором месте, то числа меняются местами. За один такой просмотр массива минимальное число перемещается по крайней мере на одно место вверх (вперед), а максимальное – в самый конец. Блок-схема этого алгоритма сортировки показана на рис.13.1б. При сортировке методом "пузырька" выполняется N-1 просмотров, на каждом i-м просмотре производится N-i сравнений. Общее количество С равно N* (N-1)/2,или O(N2).
Три вышеперечисленных метода часто называют прямыми. В них требуется порядка n*n сравнений.
Алгоритмы со структурами вложенных циклов часто используют при решении задач обработки двумерных массивов. В таких алгоритмах счетчики циклов используются для манипуляции с индексами массивов.
а) б)
Рисунок 13.1 – Фрагмент алгоритма сортировки массива методом обменов и выбора
Индивидуальные задания
1) Создать алгоритм сортировки одномерного массива длиной N=50 по убыванию методом обмена.
2) Создать алгоритм сортировки одномерного массива длиной N=55 по возрастанию методом выбора.
3) Имеется одномерный массив длиной N=45. Создать алгоритм сортировки массива по убыванию методом выбора те элементы массива, которые являются четными.
4) Имеется одномерный массив длиной N=70. Создать алгоритм сортировки массива по возрастанию методом выбора те элементы массива, которые располагаются на нечетных позициях.
5) Создать алгоритм сортировки одномерного массива длиной N=29 по убыванию методом выбора.
6) Создать алгоритм сортировки одномерного массива длиной N=37 по возрастанию методом обмена.
7) Создать алгоритм сортировки одномерного массива по убыванию длиной N==44 методом выбора. После упорядочивания в каждой группе повторяющихся элементов оставить один, остальные – удалить.
8) Имеется одномерный массив длиной N=32. Создать алгоритм сортировки массива по возрастанию методом обмена те элементы массива, которые располагаются на нечетных позициях.
9) Имеется одномерный массив длиной N=32. Создать алгоритм сортировки массива по убыванию методом обмена те элементы массива, которые располагаются на нечетных позициях.
10) Имеется одномерный массив длиной N=25. Создать алгоритм так, чтобы упорядочить массив методом выбора, чтобы элементы, находящиеся на четных позициях располагались по возрастанию, а на нечетных – по убыванию.
11) Имеется одномерный массив длиной N=25. Создать алгоритм так, чтобы упорядочить массив методом выбора, чтобы элементы, находящиеся на четных позициях располагались по убыванию, а на нечетных – по возрастанию.
12) Имеется одномерный массив длиной N=25. Создать алгоритм так, чтобы упорядочить массив методом обмена, чтобы элементы, находящиеся на четных позициях располагались по убыванию, а на нечетных – по возрастанию.
Контрольные вопросы
1) Что понимается под определением сортировка?
2) Укажите основные виды сортировки и их особенности.
3) Приведите пример алгоритма сортировки методом выбора.
4) Приведите пример алгоритма сортировки методом обмена.