Приложение Б
(обязательное) Быстрая сортировка
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;
15
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);
}} }
16
Приложение В
(обязательное) Сортировка выбором
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++)
{
17
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 ? "" : " (НЕ ОТСОРТИРОВАНО)"));
} } }
18
