- •Лабораторная работа №1. Методы сортировки Цель работы
- •Ход работы
- •Результат работы программы
- •Код программы
- •Лабораторная работа №2. Методы поиска Цель работы
- •Код программы
- •Результат работы программы
- •Лабораторная работа №3. Методы поиска подстроки в строке Цель работы
- •Код программы
- •Результат работы программы
- •Список литературы
Код программы
using System;
using System.Diagnostics;
namespace LR1
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите количество элементов массива:");
int n = int.Parse(Console.ReadLine());
int[] nums = new int[n];
FillingArray(nums);
//Console.WriteLine("Неотсортированный массив:");
//OutArray(nums);
Console.WriteLine("");
Console.WriteLine($"Количество элементов массива: {n}");
Console.WriteLine("");
Stopwatch sw = new Stopwatch();
sw.Restart();
QuickSort(nums, 0, nums.Length - 1);
sw.Stop();
Console.WriteLine($"Быстрая сортировка, длительность {sw.Elapsed}");
//OutArray(nums);
FillingArray(nums);
Console.WriteLine("");
sw.Restart();
SelectionSort(nums);
sw.Stop();
Console.WriteLine($"Сортировка обменом, длительность {sw.Elapsed}");
//OutArray(nums);
Console.WriteLine("");
FillingArray(nums);
sw.Restart();
Array.Sort(nums);
sw.Stop();
Console.WriteLine($"Стандартная функция сортировки, длительность {sw.Elapsed}");
// OutArray(nums);
}
//Быстрая сортировка
public static int[] QuickSort(int[] array, int leftIndex, int rightIndex)
{
var i = leftIndex;
var j = rightIndex;
var pivot = array[leftIndex];
while (i <= j)
{
while (array[i] < pivot)
{
i++;
}
while (array[j] > pivot)
{
j--;
}
if (i <= j)
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
if (leftIndex < j)
QuickSort(array, leftIndex, j);
if (i < rightIndex)
QuickSort(array, i, rightIndex);
return array;
}
//Сортировка обменом
static int[] SelectionSort(int[] nums)
{
int index = 0;
for (int i = 0; i < nums.Length; i++)
{
index = i;
for (int j = i; j < nums.Length; j++)
{
if (nums[j] < nums[index])
{
index = j;
}
}
if (nums[i] == nums[index])
{
continue;
}
int tmp = nums[i];
nums[i] = nums[index];
nums[index] = tmp;
}
return nums;
}
//Вывод элементов массива
static void OutArray(int[] nums)
{
for (int i = 0; i < nums.Length; i++)
{
Console.Write($"{nums[i]} ");
}
}
//Заполнение массива
static int[] FillingArray(int[] nums)
{
var random = new Random(20);
for (int i = 0; i < nums.Length; i++)
{
nums[i] = random.Next(1, 999);
}
return nums;
}
}
}
Вывод
Для выполнения лабораторной работы был написан код программы, сортирующей заданный массив тремя разными алгоритмами: быстрой сортировкой, сортировкой обменом и стандартной сортировкой. В ходе работы было выяснено, какой из алгоритмов быстрее других справляется с поставленной задачей.
По итогам экспериментов быстрее других с задачей справилась встроенная сортировка языка C#, ей немного уступила быстрая сортировка. Сортировка обменом показала на порядок более худшие результаты, кроме того, по мере роста массива ее результат ухудшался драматически.
