
- •Содержание
- •Лабораторная работа №9 классы хранения и видимость переменных
- •Теоретические сведения
- •Варианты индивидуальных заданий
- •Приложение 1
- •Лабораторная работа №10 препроцессорные средства
- •Теоретические сведения
- •1. Состав директив препроцессора и стадии препроцессорной обработки
- •2. Стадии препроцессорной обработки
- •3. Замены в тексте программы
- •4. Цепочка подстановок
- •5. Включение текстов из файлов
- •6. Условная компиляция
- •7. Операция defined
- •8. Макроподстановки средствами препроцессора
- •9. Моделирование многомерных массивов
- •10. Отличия макросов от функций
- •11. Препроцессорные операции в строке замещения
- •12. Вспомогательные директивы
- •13. Реакция на ошибки
- •14. Пустая директива
- •15. Встроенные (заранее определенные) макроимена
- •Варианты индивидуальных заданий
- •Лабораторная работа № 11 динамическое распределение памяти
- •Теоретические сведения
- •1. Функции malloc и free
- •2. Операторы new и delete
- •Варианты индивидуальных заданий
- •Лабораторная работа № 12 структура данных «список»
- •Теоретические сведения
- •1. Основные определения
- •2. Операции над списками
- •3. Пример реализации односвязного списка с помощью массива структур
- •4. Пример реализации двусвязного списка с помощью массива данных
- •Варианты индивидуальных заданий
- •Лабораторная работа №13 очереди. Операции над очередями. Деки
- •Теоретические сведения
- •1. Понятие очереди. Операции над очередями. Кольцевая очередь. Дек
- •2. Программная реализация очереди на основе массива
- •Варианты индивидуальных заданий
- •Лабораторная работа №14 стеки. Очереди. Операции над стеками и очередями
- •Теоретические сведения
- •1. Понятие стека. Операции над стеком
- •2. Программная реализация стека на основе массива
- •Варианты индивидуальных заданий
- •Лабораторная работа №15
- •Анализ пузырьковой сортировки. Пузырьковая сортировка обладает несколькими характеристиками:
- •2. Сортировка методом выбора
- •3. Сортировка методом вставки
- •4. Сортировка методом Шелла
- •5. Сортировка методом Хоора
- •6. Алгоритмы поиска
- •Варианты индивидуальных заданий
- •Приложение 2
- •Лабораторная работа №16 программирование алгоритмов вычислительной математики
- •Теоретические сведения
- •1. Методы Симпсона
- •Варианты индивидуальных заданий
- •Литература
Лабораторная работа №15
АЛГОРИТМЫ МЕТОДОВ СОРТИРОВКИ И ПОИСКА
Цель: Изучить существующие алгоритмы сортировки списков (массивов) и поиска их элементов и разработать программу для реализации этих методов.
Теоретические сведения
При работе со списками очень часто возникает необходимость перестановки элементов списка в определенном порядке. Такая задача называется сортировкой списка и для ее решения существуют различные методы. Рассмотрим некоторые из них (рис.15.1).
Прямые методы
сортировки
Выбора Обмена
Вставки
Рис. 15.1 Виды прямых методов сортировки
Пример 15.1
Функция для перемены местами элементов:
void swap(int *х, int *y)
{
int t = *x; /*промежуточная переменная*/
/* Перемена данных местами */
*х = *у;
*y = t;
}
1. Пузырьковая сортировка (методом обмена).
Задача сортировки заключается в следующем: задан список целых чисел (простейший случай) В=< K1, K2,..., Kn >. Требуется переставить элементы списка В так, чтобы получить упорядоченный список B'=< K'1, K'2,...,K'n >, в котором для любого 1<=i<=n элемент K'(i) <= K'(i+1).
При обменной сортировке упорядоченный список В' получается из В систематическим обменом пары рядом стоящих элементов, не отвечающих требуемому порядку, пока такие пары существуют.
Наиболее простой метод систематического обмена соседних элементов с неправильным порядком при просмотре всего списка слева на право определяет пузырьковую сортировку: максимальные элементы как бы всплывают в конце списка.
Пример 15.2
Функция BubbleSort() реализует алгоритм сортировки методом «пузырька»:
void BubbleSort(int a[],int n)
{
/*функции передается массив и его размерность */
int i, j; /* переменные цикла */
for (i=0; i<n; i++)
for (j=n-1; j>i; j--)
if (a[j-1] > a[j])
/*если элемент "тяжелее" следующего
swap(&a[j-1],&a[j]) /*поменять их местами */
}
Анализ пузырьковой сортировки. Пузырьковая сортировка обладает несколькими характеристиками:
• после каждой итерации только один элемент данных помещается в свою правильную позицию;
• сравнение и перестановка смежных элементов данных;
• в каждой итерации внутреннего цикла выполняется не более (n-iteration-1) перестановок;
• худший случай —когда элементы данных отсортированы в обратном порядке;
• лучший случай —когда элементы данных уже отсортированы в правильном порядке;
• легкость реализации.
2. Сортировка методом выбора
Алгоритм:
шаг – находится наименьший элемент в массиве;
шаг – найденный элемент меняется с первым элементом;
шаг – процесс повторяется с оставшимися n-1 элементами,n-2 элементами и так далее, пока в конце не останется самый большой элемент, который не нуждается в перестановке.
Пример 15.3
void MinSort(int a[], int n)
{ int i, j, k;
for (i=0; i<n-1; i++)
{ for (k=i; j=i+1; j<n; j++) // находим в цикле
if (a[j] < a[k]) // минимальный элемент
{ k = j; // запоминаем его номер в к
swap(&a[k],&a[i]);// меняем местами минимальный и
} // элемент, с которого начинался цикл
}
}