Приложение В
(обязательное) Сортировка обменом
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)
{ |
float[] arr = new float[size]; |
|
|
Random random = new Random(); |
|
for (int i = 0; i < arr.Length; i++) |
|
{ |
arr[i] = (float)(random.NextDouble() * 100); |
|
} |
|
|
|
|
|
float[] arrCopy = (float[])arr.Clone(); |
|
long comparisons = 0; |
|
long swaps = 0; |
|
Stopwatch stopwatch = new Stopwatch(); |
|
stopwatch.Start(); |
|
int k = arrCopy.Length; |
|
bool swapped |
|
for (int i = 0; i < k - 1; i++) |
|
{ |
swapped = false |
|
|
|
|
for (int j = 0; j < k - i - 1; j++) |
|
|
{ |
comparisons++; // счетчик для сравнения элементов |
|
|
|
|
|
|
if (arrCopy[j] > arrCopy[j + 1]) |
|
|
|
{ |
swaps++; // счетчик перестановок |
|
|
|
|
|
|
|
|
float temp = arrCopy[j]; |
|
|
|
|
arrCopy[j] = arrCopy[j + 1]; |
|
|
|
|
arrCopy[j + 1] = temp; |
|
|
|
} |
swapped = true; |
|
|
|
|
}
if (!swapped) break;
}
stopwatch.Stop();
Console.WriteLine($"{size} \t{stopwatch.Elapsed.TotalMilliseconds:F6}\t{comparisons}\t\t{swaps}\t\t{comparisons + swaps}");
} } }