- •Министерство образования и науки российской федерации
- •Оглавление
- •Введение
- •Практическая работа № 1 Вычисление выражений с использованием стандартных функций
- •2. Постановка задачи
- •3. Варианты
- •4. Методические указания
- •Практическая работа №2
- •4. Методические указания
- •Практическая работа №3 Работа с одномерными массивами
- •1. Краткие теоретические сведения
- •2. Постановка задачи
- •3. Варианты
- •4. Методические указания
- •5. Содержание отчета:
- •Практическая работа №4 Сортировка массивов методом пузырька
- •3 . Методические указания
- •4. Содержание отчета:
- •Практическая работа № 6 Сортировка массивов методом Шелла
- •4. Содержание отчета:
- •5.Контрольные вопросы:
- •Практическая работа №7 Динамические массивы
- •2. Постановка задачи
- •3. Варианты
- •4. Методические указания
- •5. Содержание отчета
- •3. Варианты
- •4. Методические указания
- •6. Контрольные вопросы:
- •Практическая работа № 9
- •2. Постановка задачи
- •3. Варианты
- •6. Контрольные вопросы:
- •Практическая работа №10 Динамические структуры данных
- •2. Постановка задачи
- •3. Варианты
- •5. Содержание отчета
- •Практическая работа №11 Хранение данных на внешних носителях информации
- •1. Краткие теоретические сведения
- •2. Постановка задачи
- •3. Варианты:
- •6. Контрольные вопросы:
- •Практическая работа № 12 Функции для работы со строками.
- •5. Контрольные вопросы:
- •Литература:
4. Содержание отчета:
Постановка задачи (общая и конкретного варианта).
Текст программы.
Результаты тестов.
Контрольные вопросы:
В чем суть сортировки вставками?
Где применяется сортировка вставками?
В чем преимущества сортировки вставками?
В чем недостатки сортировки вставками?
Практическая работа № 6 Сортировка массивов методом Шелла
Цель работы: нучиться сортировать одномерные и двумерные массивы методом вставок.
Теоретические сведения.
Сортировка Шелла (англ. Shell sort) — алгоритм сортировки, являющийся усовершенствованным вариантом сортировки вставками. Идея метода Шелла состоит в сравнении элементов, стоящих не только рядом, но и на определённом расстоянии друг от друга. Иными словами — это сортировка вставками с предварительными «грубыми» проходами. Аналогичный метод усовершенствования пузырьковой сортировки называется сортировка расчёской.
Метод Шелла является усовершенствованием метода простого включения, который основан на том, что включение использует любой частичный порядок. Но недостатком простого включения является то, что во внутреннем цикле элемент A[i] фактически сдвигается на одну позицию. И так до тех пор, пока он не достигнет своего места в отсортированной части. (На самом деле передвигалось место, оставленное под A[i]). Метод Шелла позволяет преодолеть это ограничение следующим интересным способом. Вместо включения A[i] в подмассив предшествующих ему элементов, его включают в подсписок, содержащий элементы A[i – h], A[i – 2h], A[i – 3h] и так далее, где h – положительная константа. Таким образом, формируется массив, в котором «h-серии» элементов, отстоящие друг от друга на h, сортируются отдельно. Конечно, этого недостаточно: процесс возобновляется с новым значением h, меньшим предыдущего. И так до тех пор, пока не будет достигнуто значение h = 1.
Пример сотрировки методом Шелла приведен на рис.1

Рис.1. Сортировка методом Шелла
Блок-схема алгоритма сортировки методом Шелла представлена на рис.2

Рис.2. Алгоритм сортировки методом Шелла
Реализация сортировки методом Шелла на языке С
// BaseType - любой перечисляемый тип
// typedef int BaseType - пример
void ShellsSort(BaseType *A, unsigned N)
{
unsigned i,j,k;
BaseType t;
for(k = N/2; k > 0; k /=2)
for(i = k; i < N; i++)
{
t = A[i];
for(j = i; j>=k; j-=k)
{
if(t < A[j-k])
A[j] = A[j-k];
else
break;
}
A[j] = t;
}
}
Постановка задачи:
Отсортировать одномерный и двумерный массивы методом Шелла по возрастанию.
Массивы сгенероровать с помощью генератора случайных чисел, вывести на печать.
Методические указания
1. Формирование массива осуществляется с помощью датчика случайных чисел.. В массиве должны быть записаны и положительные и отрицательные элементы. Например, оператор a[I]=rand()%100-50; формирует псевдослучайное число из диапазона [-50;49]. 2. Вывод результатов должен выполняться после выполнения каждого задания. Элементы массива рекомендуется выводить в строчку, разделяя их между собой пробелом.
