Выполнил:
студент 2 курса
группы 20-КМ-ПР1
Овезов М.Н.
Краснодар
2022
1 Задания
Для выполнения лабораторной работы был выбран язык C#, так как
данный язык прост в синтаксисе и прекрасно подходит для работы с
алгоритмами сортировки массивов.
В первом задании была исследована зависимость скорости
пирамидальной сортировки от степени упорядоченности входного массива и
его размера (см. рис. 1 и листинг 1).
Сортировка пирамидой использует бинарное сортирующее дерево.
Сортирующее дерево — это такое дерево, у которого выполнены условия:
Каждый лист имеет глубину либо d, либо d-1, d — максимальная
глубина дерева.
Значение в любой вершине не меньше (другой вариант — не больше)
значения её потомков.
Удобная структура данных для сортирующего дерева — такой массив
Array, что Array[0] — элемент в корне, а потомки элемента Array[i] являются
Array[2i+1] и Array[2i+2].
Алгоритм сортировки будет состоять из двух основных шагов:
1. Выстраиваем элементы массива в виде сортирующего дерева:
Этот шаг требует O(n) операций.
//step 2: sorting
int buf;
for (int k = len - 1; k > 0; --k)
{
buf = arr[0];
arr[0] = arr[k];
arr[k] = buf;
int i = 0, prev_i = -1;
while (i != prev_i)
{
prev_i = i;
i = add2pyramid(arr, i, k);
}
}
Листинг 2
public static void Merge(int[] array, int lowIndex, int middleIndex,
int highIndex)
{
var left = lowIndex;
var right = middleIndex + 1;
var tempArray = new int[highIndex - lowIndex + 1];
var index = 0;
while ((left <= middleIndex) && (right <= highIndex))
{
if (array[left] < array[right])
{
tempArray[index] = array[left];
left++;
}
else
{
tempArray[index] = array[right];
right++;
}
index++;
}
for (var i = left; i <= middleIndex; i++)
{
tempArray[index] = array[i];
index++;
}
for (var i = right; i <= highIndex; i++)
{
tempArray[index] = array[i];
index++;
}
for (var i = 0; i < tempArray.Length; i++)
{
array[lowIndex + i] = tempArray[i];
}
}
//сортировка слиянием
public static int[] MergeSort(int[] array, int lowIndex, int
highIndex)
{
if (lowIndex < highIndex)
{
var middleIndex = (lowIndex + highIndex) / 2;
MergeSort(array, lowIndex, middleIndex);
MergeSort(array, middleIndex + 1, highIndex);
Merge(array, lowIndex, middleIndex, highIndex);
}
return array;
}
public static int[] MergeSort(int[] array)
{
return MergeSort(array, 0, array.Length - 1);
}
3 Вывод
В результате выполнения лабораторной работы были получены и
укреплены знания по алгоритмам сортировки одномерных массивов.