Приложение б
(обязательное)
Быстрая сортировка
using System;
using System.Diagnostics;
class Program
{
static long comparisons = 0;
static long swaps = 0;
static void Main()
{
int[] sizes = { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };
Console.WriteLine("Быстрая сортировка - Результаты:");
Console.WriteLine("Размер\tВремя (мс)\tСравнения\tПерестановки\tВсего операций");
Console.WriteLine(new string('-', 60));
foreach (int size in sizes)
{
comparisons = 0;
swaps = 0;
int[] arr = new int[size];
Random random = new Random();
// Генерация отрицательных целых чисел от -1000000 до -1
for (int i = 0; i < arr.Length; i++)
{
arr[i] = -random.Next(1, 1000001); // от -1000000 до -1
}
int[] arrCopy = (int[])arr.Clone();
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
quicksort(arrCopy, 0, arrCopy.Length - 1);
stopwatch.Stop();
// Проверка корректности сортировки
bool isSorted = true;
for (int i = 0; i < arrCopy.Length - 1; i++)
{
if (arrCopy[i] > arrCopy[i + 1])
{
isSorted = false;
break;
}
}
Console.WriteLine($"{size}\t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}" +
(isSorted ? "" : " (НЕ ОТСОРТИРОВАНО)"));
}
}
static void quicksort(int[] arr, int l, int r)
{
comparisons++;
if (l >= r) return;
int i = l;
int j = r;
int opora = arr[l + (r - l) / 2];
while (i <= j)
{
while (arr[i] < opora)
{
comparisons++;
i++;
}
while (arr[j] > opora)
{
comparisons++;
j--;
}
if (i <= j)
{
swaps++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (l < j)
{
quicksort(arr, l, j);
}
if (i < r)
{
quicksort(arr, i, r);
}
}
}
Приложение в
(обязательное)
Сортировка выбором
using System;
using System.Diagnostics;
class Program
{
static void Main()
{
int[] sizes = { 1, 2, 3, 4, 5, 10, 15, 20, 25, 30, 40, 50, 75, 100, 150, 200, 250, 300, 400, 500, 600, 800, 1000 };
Console.WriteLine("Сортировка выбором - Результаты:");
Console.WriteLine("Размер\tВремя (мс)\tСравнения\tПерестановки\tВсего операций");
Console.WriteLine(new string('-', 60));
foreach (int size in sizes)
{
int[] arr = new int[size];
Random random = new Random();
// Генерация отрицательных целых чисел от -1000000 до -1
for (int i = 0; i < arr.Length; i++)
{
arr[i] = -random.Next(1, 1000001); // от -1000000 до -1
}
int[] arrCopy = (int[])arr.Clone();
long comparisons = 0;
long swaps = 0;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
// Реализация сортировки выбором
int n = arrCopy.Length;
for (int i = 0; i < n - 1; i++)
{
int minIndex = i;
for (int j = i + 1; j < n; j++)
{
comparisons++; // счетчик сравнений
if (arrCopy[j] < arrCopy[minIndex])
{
minIndex = j;
}
}
if (minIndex != i)
{
swaps++; // счетчик перестановок
int temp = arrCopy[i];
arrCopy[i] = arrCopy[minIndex];
arrCopy[minIndex] = temp;
}
}
stopwatch.Stop();
// Проверка корректности сортировки
bool isSorted = true;
for (int i = 0; i < n - 1; i++)
{
if (arrCopy[i] > arrCopy[i + 1])
{
isSorted = false;
break;
}
}
Console.WriteLine($"{size}\t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}" +
(isSorted ? "" : " (НЕ ОТСОРТИРОВАНО)"));
}
}
}
Томск 2025
