Найти в Дзене
Программы от меня

C# меняем местами элементы в массиве

Ну что, друзья, соскучились по Шарпу? Покрылись пылью ваши Visual Studio? Смахните пыль и запустите сию среду разработки — на C# писать будем. Задачку разберем самую простую — есть массив элементов, и надо поменять местами два (или более) элементов. Смахиваем пыль с Visual Studio (можно с VSCode или какой другой IDE для C#), запускаем ее и создаем новый проект — консольное приложение (назовем его ну скажем change). В результате у меня появился вот такой код: Создаем массив arr, состоящий из 5 элементов [“a”,”b”,”c”,”D”,”d”]. Кроме того выведем содержимое этого массива через команду string.Join() . Общий вид программы и окно вывода будет выглядеть так: В string.Join мы использовали первым параметром пробел, чтобы при выводе было разделение между элементами Всё, полигон готов, можно приступать к испытаниям. Базовый обмен прост, как «два плюс один равно три»… и собственно из трёх элементов функционал обмена и состоит. void Swap(string[] array, int i, int j)
{
string temp = ar
Оглавление

Ну что, друзья, соскучились по Шарпу? Покрылись пылью ваши Visual Studio? Смахните пыль и запустите сию среду разработки — на C# писать будем.

Задачку разберем самую простую — есть массив элементов, и надо поменять местами два (или более) элементов.

Меняем элементы местами
Меняем элементы местами

Подготовка.

Смахиваем пыль с Visual Studio (можно с VSCode или какой другой IDE для C#), запускаем ее и создаем новый проект — консольное приложение (назовем его ну скажем change). В результате у меня появился вот такой код:

Hello World
Hello World

Создаем массив arr, состоящий из 5 элементов [“a”,”b”,”c”,”D”,”d”]. Кроме того выведем содержимое этого массива через команду string.Join() . Общий вид программы и окно вывода будет выглядеть так:

Исходное состояние
Исходное состояние

В string.Join мы использовали первым параметром пробел, чтобы при выводе было разделение между элементами

Всё, полигон готов, можно приступать к испытаниям.

Базовый обмен двух элементов

Базовый обмен прост, как «два плюс один равно три»… и собственно из трёх элементов функционал обмена и состоит.

void Swap(string[] array, int i, int j)
{
string temp = array[i];
array[i] = array[j];
array[j] = temp;
}

То есть мы вводим переменную temp, которой присваиваем значение первого элемента, первому присваиваем значение второго, ну а второму — соответственно то, что в temp.

Всё, обмен произведем.

Алгоритм ясен? Хорошо. Проверим его на нашем «полигоне», поменяем элементы…
А кстати вопросик на засыпку: как нумеруются элементы в нашем массиве?

Прааааавильно! С нуля. То есть первый элемент — это arr[0]. Давайте поменяем первый (нулевой элемент ) с третьим. Но естественно выведем и исходный вариант (правда Console.WriteLine у нас в коде будет больше).

Код нашей программы и результат выполнения будет следующим.

-4

Т.е элемент arr[3] встал на место arr[0], а arr[0] на место arr[3]. Всё верно.

Переворот массива

Переворот массива — это такая обработка массива, в результате которой, как в Библии, «последние станут первыми, а первые — последними», т.е начальные элементы массива передвинутся на конечные позиции, а конечные — на начальные.

Есть несколько способов организации переворота массива.
Способ первый — с использованием вспомогательного массива

-5

Как видим, в функции создан вспомогательный массив reversed, который заполняется из исходного массива original через цикл элементами original[original.Length - 1– i]

где i – номер итерации цикла. Результат — тут же на скрине.

Способ 2.
на месте (с обменом элементов)

void ReverseInPlace(string[] array)
{
for (int i = 0; i < array.Length / 2; i++)
{
(array[i], array[array.Length - 1 - i]) = (array[array.Length - 1 - i], array[i]);
}
}

Как видим, здесь замена идет сразу двух элементов. Такое тоже возможно. Результат вы видите… на своих консольных приложениях. А то что всё я да я. Сами сделайте, самостоятельно. О результатах мне напишите в комментариях.

Сортировка.

Ну и куда мы без сортировки. Операция, которой мы постоянно пользуемся в Excel, - по сути тоже смена местами элементов в массиве.

void Sort(int[] array)
{
int n = array.Length;
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (array[j] > array[j + 1])
{
(array[j], array[j + 1]) = (array[j + 1], array[j]);
}
}
}
}

И результат работы функции (правда, чтобы сразу видеть результат сортировки, мы сделали исходный массив числовым (int), и соответственно функция работы Sort – тоже под числовой массив). Результат — на рисунке.

-6

Мы рассмотрели несколько вариантов замены элементов массива. Какой вам нравится больше всех? А может быть мы что-то пропустили? Пишите в комментариях