You are on page 1of 6

Клас System.

Array
Всі масиви C# є нащадками класу System.Array у якого є ряд
корисних властивостей та методів. Наприклад властивість:
Length – повертає кількість елементів масиву;
Rank – повертає розмірність масиву (1 для одновимірного і т.д.).
Тепер розглянемо приклад програми для виводу на єкран масиву за
допомогою циклу for:
using System;
class Program {
static void Main() {
int[] arr = { 1, 3, 5, 8, 2 };
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine("arr[{0}]={1}", i,
arr[i]);
}
Console.ReadKey();
}
}
Ця програма виведе на екран наступне:
arr[0]=1
arr[1]=3
arr[2]=5
arr[3]=8
arr[4]=2

В цій програмі можна замінити цикл for на foreach:


foreach (int i in arr) {
Console.WriteLine(i);
}

але слід враховувати, що у випадку циклу foreach ітераційну змінну


можна використовувати тільки для читання.
Серед методів System.Array слід виділити наступні:
Clear() – очищує мсив, заповнивши всі елементи 0 або пустими
значеннями null;
Copy() – копіює заданий діапазон значень з одного масиву в інший;
Clone() – створює повну копію масиву разом зі значеннями;

1
IndexOf(),LastIndexOf() – відповідно шукають перше та
останнє входження елементу в масив;
Sort() – сортує одновимірний масив за зростанням;
BinarySearch() – швидкий пошук в сортованому масиві;
Reverse() – змінює порядок слідування елементів масиву на
протилежний.
Розглянемо приклад:
using System;
class Program {
static void Main() {
int[] arr = { 1, 8, 5, 3, 2 };//створимо масив
//створимо копію
int[] arrNew = (int[])arr.Clone();
Array.Sort(arrNew); //відсортуємо масив
for (int i = 0; i < arrNew.Length; i++) {
//виведемо відсортовані значення
Console.WriteLine(
"arrNew[{0}]={1}", i, arrNew[i]
);
}
Console.ReadKey();
}
}
результатом роботи програми буде:
arrNew[0]=1
arrNew[1]=2
arrNew[2]=3
arrNew[3]=5
arrNew[4]=8

Сортування масиву C#. Алгоритм "Сортування вибором"

 Завдання
 Алгоритм "Сортування вибором"
 Реалізація алгоритму сортування вибором C#
 Програма сортування масиву C# вибором
 Збираємо масив цілих чисел
 Виводимо невідсортований масив у консоль
 Сортуємо масив, використовуючи алгоритм «Сортування вибором» та
показуємо результат
 Результат роботи програми

2
 Вихідний код програми
 Разом

На даний момент у нас вже вистачає знань, щоб спробувати написати найпростішу
програму C#. Але найпростіша — не означає марна. Наша програма буде сортувати
масив C# . При написанні різних програм нам часто доводиться стикатися з таким
поняттям, як сортування. Наприклад, необхідно відсортувати список людей за
алфавітом або сортувати оцінки учнів за зростанням. І для того, щоб максимально
ефективно вирішити таке завдання, ми повинні знати не тільки саму мову
програмування, а й алгоритми сортування — їх складність, як вони реалізуються
на практиці і таке інше. Сьогодні ми розглянемо найпростіший алгоритм сортування
масиву C# - сортування вибором.
Завдання

Р ЕК Л АМ А
Користувач вводить з клавіатури цілі числа розділені комою. Програма повинна
зібрати з цих чисел масив та відсортувати його за зростанням.
У консоль програма виведе невідсортований та відсортований масиви.
Алгоритм "Сортування вибором"
Цей алгоритм є одним із найпростіших алгоритмів сортування масиву. Його сенс
полягає в тому, щоб, щоб йти масивом, наприклад зліва направо, щоразу шукати
мінімальний елемент масиву і обмінювати його з першим елементом
невідсортованої частини масиву. Кроки алгоритму можна представити так:

1. Знаходимо мінімальний елемент у масиві.


2. Змінюємо місцями мінімальний та перший елемент місцями.
3. Шукаємо мінімальний елемент у невідсортованій частині масиву, тобто
починаючи вже з другого елемента масиву.
4. Міняємо місцями другий елемент масиву та знайдений мінімальний.
5. Шукаємо мінімальний елемент у масиві, починаючи з третього , міняємо
місцями третій та мінімальний елементи.
6. Продовжуємо алгоритм до тих пір, поки не дійдемо до кінця масиву.
Реалізація алгоритму сортування вибором C#
Спочатку наведу реалізацію алгоритму сортування масиви вибором C#.

// intArray - це масив цілих чисел


int indx ; //змінна для зберігання індексу мінімального елемента масиву
for ( int i = 0 ; i < intArray. Length ; i++ ) //проходимо по масиву з початку до кінця
{
indx = i; //вважаємо, що мінімальний елемент має поточний індекс
for ( int j = i; j < intArray. Length ; j++ ) //Шукаємо мінімальний елемент у
невідсортованій частині
{
if ( intArray [ j ] < intArray [ indx ])
{
indx = j; //знайшли в масиві число менше, ніж intArray [ indx ] - запам'ятовуємо його

3
індекс у масиві
}
}
if ( intArray [ indx ] == intArray [ i ]) //якщо мінімальний елемент дорівнює
поточному значенню - нічого не міняємо
continue ;
//Змінюємо місцями мінімальний елемент і перший у невідсортованій частині
int temp = intArray [ i ] ; //Тимчасова змінна, щоб не втратити значення intArray [i]
intArray [ i ] = intArray [ indx ] ;
intArray [ indx ] = temp;
}
Перевірити роботу алгоритму нам допоможе невелика консольна програма C#, яку
ми зараз і напишемо.

Програма сортування масиву C# вибором


За умовою завдання користувач може ввести будь-яку кількість цілих чисел,
розділених комами. Нам необхідно прочитати ці числа, скласти з отриманих чисел
масив , вивести його в консоль , відсортувати масив наведеним алгоритмом і
повернути в консоль відсортований масив. Всі ці кроки реалізуються досить легко.
Збираємо масив цілих чисел
Console. WriteLine ( "Введіть через кому цілі числа і натисніть Enter " ) ;
string [ ] nums = Console. ReadLine () . Split ( new char [] { ',' }) ;
int [ ] intArray = new int [ nums. Length ] ;
for ( int i = 0 ; i < nums. Length ; i ++ )
{
intArray [ i ] = int . Parse ( nums [ i ]) ;
}
У першому рядку ми пропонуємо користувачеві запровадити цілі числа. Після того,
як користувач введе будь-яку кількість чисел і натисне Enter , програма переходить
до наступного кроку - розділить отриманий від користувача рядок на масив рядків:

string [ ] nums = Console. ReadLine () . Split ( new char [] { ',' }) ;


тут nums - це масив рядків .
Метод Console.ReadLine () повертає нам останній рядок з консолі.
Метод Split ( new char [] { ',' } ) - це метод для типу string , який повертає масив
рядків, створений з вихідного рядка. Як аргумент цей метод приймає масив символів
за якими буде ділитися рядок. Так як у нас, за умовами завдання, роздільник всього
один - кома, то і масив роздільників у методі Split () містить лише один елемент.
На наступному кроці ми створюємо масив цілих чисел , розмір якого збігається з
розміром масиву nums .
int [ ] intArray = new int [ nums. Length ]
Далі, у циклі for ми наповнюємо наш створений масив числами, використовуючи
метод Parse () типу даних int , який повертає нам ціле число з рядка.
for ( int i = 0 ; i < nums. Length ; i ++ )
{
intArray [ i ] = int. Parse ( nums [ i ]) ;
4
}
Виводимо невідсортований масив у консоль
Вивести невідсортований масив користувачеві простіше, якщо скористатися
циклом foreach :
Console. WriteLine ( " Невідсортований масив : " ) ;
foreach ( int value in intArray )
{
Console. Write ( $ " { value } " ) ;
}
Сортуємо масив, використовуючи алгоритм «Сортування вибором» та показуємо
результат
Для цього використовуємо реалізацію алгоритму, що представлена вище. Щоб
вивести відсортований масив користувачу знову використовуємо цикл foreach .
Console. WriteLine ( "\r\ n Відсортований масив:" ) ;
foreach ( int value in intArray )
{
Console. Write ( $ " { value } " ) ;
}
так як для неосортованого масиву ми використовували метод Console.Write () , які
не здійснює перехід на наступний рядок, то тут, у методі Console.WriteLine () ми
використовували керуючі символи C# /r/n для переходу на новий рядок і повернення
каретки в початок рядка.
Результат роботи програми
В результаті роботи програми можна отримати, наприклад, такий висновок у
консолі:

Введіть через кому цілі числа та натисніть Enter


0,100,999,345,-100,1,0,9,7,6,5,4,3,2,1,67,88

Невідсортований масив: 0 100 999 345 -100 1 0 9 7 6 5 4 3 2 1 67 88

Відсортований масив: -100 0 0 1 1 2 3 4 5 6 7 9 67 88 100 345 999


Як бачите, алгоритм успішно справляється із сортуванням масиву і всі задані числа
були відсортовані від меншого до більшого.

Вихідний код програми


Нижче наведено весь вихідний код програми C# для сортування масиву:

using System;
namespace SelectSort
{
class Program
{
static void Main ( string [] args )
{
Console. WriteLine ( " Введіть через кому цілі числа і натисніть Enter" ) ;
5
string [ ] nums = Console. ReadLine () . Split ( new char [] { ',' }) ;
int [ ] intArray = new int [ nums. Length ] ;
for ( int i = 0 ; i < nums. Length ; i ++ )
{
intArray [ i ] = int. Parse ( nums [ i ]) ;
}
Console. WriteLine ( " Невідсортований масив : " ) ;
foreach ( int value in intArray )
{
Console. Write ( $ "{ value }" ) ;
}
int indx ; //змінна для зберігання індексу мінімального елемента масиву
for ( int i = 0 ; i < intArray. Length ; i++ ) //проходимо по масиву з початку до кінця
{
indx = i; //вважаємо, що мінімальний елемент має поточний індекс
for ( int j = i; j < intArray. Length ; j++ ) //Шукаємо мінімальний елемент у
невідсортованій частині
{
if ( intArray [ j ] < intArray [ indx ])
{
indx = j; //знайшли в масиві число менше, ніж intArray [ indx ] - запам'ятовуємо його
індекс у масиві
}
}
if ( intArray [ indx ] == intArray [ i ]) //якщо мінімальний елемент дорівнює
поточному значенню - нічого не міняємо
continue ;
//Міняємо місцями мінімальний елемент і перший у невідсортованій частині
int temp = intArray [ i ] ; //Тимчасова змінна, щоб не втратити значення intArray [i]
intArray [ i ] = intArray [ indx ] ;
intArray [ indx ] = temp;
}
Console. WriteLine ( "\r\ n Відсортований масив:" ) ;
foreach ( int value in intArray )
{
Console. Write ( $ "{ value }" ) ;
}
}
}
}

You might also like