Ручне сортування масиву
Свайпніть щоб показати меню
Сортування — це основна операція у програмуванні, оскільки воно допомагає впорядковувати дані для ефективнішого пошуку, аналізу та представлення інформації. Хоча C# надає вбудовані методи для сортування масивів, розуміння принципів роботи алгоритмів сортування дає цінне уявлення про алгоритмічне мислення та розв'язання задач. Ручні алгоритми сортування, такі як selection sort, дозволяють побачити, як елементи порівнюються та переміщуються крок за кроком для отримання відсортованого масиву. Це розуміння є важливим у випадках, коли потрібна власна логіка сортування або робота у середовищах з обмеженою підтримкою бібліотек.
Selection sort — це простий алгоритм сортування, який багаторазово вибирає найменший (для сортування за зростанням) або найбільший (для сортування за спаданням) елемент з невідсортованої частини масиву та переміщує його на відповідну позицію у відсортованій частині.
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 5, 2, 9, 1, 5, 6 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortAscending(numbers); Console.WriteLine("Sorted array (ascending):"); PrintArray(numbers); } public static void SelectionSortAscending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
Сортування вибором працює шляхом поділу масиву на відсортовану та невідсортовану частини. На кожному кроці вибирається найменший елемент із невідсортованої частини та міняється місцями з першим невідсортованим елементом, таким чином відсортована частина збільшується на один елемент.
У наведеному вище коді спочатку виконується перебір кожного елемента масиву, крім останнього. Для кожної позиції i шукається найменше значення в решті масиву (від i + 1 до кінця). Коли знаходиться менший елемент, оновлюється minIndex. Після завершення внутрішнього циклу елемент на позиції i міняється місцями з елементом на minIndex, що гарантує розміщення найменшого значення на поточній позиції. Цей процес повторюється, доки весь масив не буде відсортовано за зростанням.
Program.cs
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849using System; namespace ConsoleApp { public class Program { public static void Main(string[] args) { int[] numbers = { 3, 8, 4, 7, 2, 9 }; Console.WriteLine("Original array:"); PrintArray(numbers); SelectionSortDescending(numbers); Console.WriteLine("Sorted array (descending):"); PrintArray(numbers); } public static void SelectionSortDescending(int[] array) { int n = array.Length; for (int i = 0; i < n - 1; i++) { int maxIndex = i; for (int j = i + 1; j < n; j++) { if (array[j] > array[maxIndex]) { maxIndex = j; } } int temp = array[i]; array[i] = array[maxIndex]; array[maxIndex] = temp; } } public static void PrintArray(int[] array) { foreach (int num in array) { Console.Write(num + " "); } Console.WriteLine(); } } }
Код визначає клас Program з методом Main, який демонструє сортування цілочисельного масиву за спаданням за допомогою сортування вибором. Спочатку ініціалізується масив numbers і виводиться його початковий вміст. Далі викликається метод SelectionSortDescending для сортування масиву від найбільшого до найменшого. Цей метод працює шляхом багаторазового пошуку максимального значення в невідсортованій частині масиву та обміну його з першим невідсортованим елементом. Після сортування програма виводить оновлений масив, у якому елементи розташовані у порядку спадання.
1. Яка часовa складність сортування вибором?
2. Чим сортування вибором відрізняється від сортування бульбашкою?
3. Чому може виникнути потреба реалізувати сортування вручну замість використання вбудованих методів?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат