Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Практика 1(СД)

.pdf
Скачиваний:
0
Добавлен:
08.10.2025
Размер:
380.02 Кб
Скачать

Console.WriteLine("1 - Быстрая сортировка"); Console.WriteLine("2 - Сортировка расческой");

Console.WriteLine("3 - Сортировка выбором (только отрицательные числа)");

Console.WriteLine("4 - Выход"); Console.Write("Выберите вариант: "); string choice = Console.ReadLine(); Console.WriteLine();

int[] originalArray = (int[])array.Clone(); switch (choice)

{

case "1":

Console.WriteLine("Быстрая сортировка:");

QuickSort(array, 0, array.Length - 1);

array = (int[])originalArray.Clone(); break;

case "2":

Console.WriteLine("Сортировка расческой:"); int[] combArray = (int[])array.Clone(); CombSort(combArray);

array = (int[])originalArray.Clone(); break;

case "3":

11

Console.WriteLine("Сортировка выбором (только отрицательные числа минимум -10^6):");

int[] selectionArray = (int[])array.Clone();

if (CheckArrayForNegativeRange(selectionArray))

{

SelectionSort(selectionArray);

}

else

{

Console.WriteLine("Ошибка: массив содержит числа вне диапазона (должны быть отрицательные, >= -1000000).");

}

array = (int[])originalArray.Clone(); break;

case "4": exit = true; break;

default:

Console.WriteLine("Неверный выбор!"); break;

}

if (!exit)

{

12

Console.WriteLine();

Console.WriteLine("Нажмите любую клавишу для продолжения...");

Console.ReadKey();

Console.Clear();

}

}

}

// Инициализация массива отрицательными числами от -1 до -

1000000 включительно

static void InitializeArray()

{

array = new int[SIZE];

for (int i = 0; i < SIZE; i++)

{

array[i] = -random.Next(1, 1_000_001);

}

}

static void PrintArray<T>(T[] arr) where T : IFormattable

{

for (int i = 0; i < arr.Length; i++)

13

{

Console.Write($"{arr[i],10} ");

}

Console.WriteLine();

}

static bool CheckArrayForNegativeRange(int[] arr)

{

foreach (int num in arr)

{

if (num >= 0 || num < -1_000_000)

{

return false;

}

}

return true;

}

static void QuickSort(int[] numbers, int left, int right)

{

Console.WriteLine("До сортировки:"); PrintArray(numbers);

14

QuickSortRecursive(numbers, left, right);

Console.WriteLine("После сортировки:");

PrintArray(numbers);

}

static void QuickSortRecursive(int[] numbers, int left, int right)

{

int pivot;

int l_hold = left; int r_hold = right;

pivot = numbers[left]; while (left < right)

{

while ((numbers[right] >= pivot) && (left < right)) right--;

if (left != right)

{

numbers[left] = numbers[right]; left++;

}

while ((numbers[left] <= pivot) && (left < right)) left++;

15

if (left != right)

{

numbers[right] = numbers[left]; right--;

}

}

numbers[left] = pivot; int pivotIndex = left; left = l_hold;

right = r_hold;

if (left < pivotIndex)

QuickSortRecursive(numbers, left, pivotIndex - 1); if (right > pivotIndex)

QuickSortRecursive(numbers, pivotIndex + 1, right);

}

static void CombSort(int[] arr)

{

Console.WriteLine("До сортировки:");

PrintArray(arr);

int n = arr.Length; double factor = 1.2473309;

16

int step = n - 1; while (step >= 1)

{

for (int i = 0; i + step < n; i++)

{

if (arr[i] > arr[i + step])

{

int temp = arr[i]; arr[i] = arr[i + step]; arr[i + step] = temp;

}

}

step = (int)(step / factor);

}

BubbleSortPass(arr); Console.WriteLine("После сортировки:"); PrintArray(arr);

}

static void BubbleSortPass(int[] arr)

{

for (int i = 0; i < arr.Length - 1; i++)

17

{

if (arr[i] > arr[i + 1])

{

int temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp;

}

}

}

static void SelectionSort(int[] arr)

{

Console.WriteLine("До сортировки:"); PrintArray(arr);

int len = arr.Length;

for (int i = 0; i < len - 1; i++)

{

int min = i;

for (int j = i + 1; j < len; j++)

{

if (arr[j] < arr[min]) min = j;

18

}

if (min != i)

{

int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp;

}

}

Console.WriteLine("После сортировки:"); PrintArray(arr);

}

}

}

19

Соседние файлы в предмете Структуры данных