Статьи Утилиты Telegram YouTube RuTube Отзывы

Алгоритм инвертирования массива

Видеогайд

22 февраля 2023

Тэги: Java, алгоритмы, головоломки.

Давайте рассмотрим алгоритм инвертирования массива. На вход нам подаётся массив произвольной длины и нужно поменять порядок следования его элементов на обратный. То есть сделать первый элемент последним, второй – предпоследним и т.д.

Для массива целых чисел реализация алгоритма на Java будет выглядеть так:

public void invertArray(int[] array) {
    for (int i = 0; i < array.length / 2; i++) {
        int temp = array[i];
        array[i] = array[array.length - i - 1];
        array[array.length - i - 1] = temp;
    }
}

Метод invertArray() получает исходный массив в качестве параметра. Затем в цикле проходим по первой половине элементов и на каждой итерации меняем местами элемент с индексом i и элемент с таким же смещением, но с конца массива (array.length – i – 1). Чтобы обменять значения местами мы используем временную переменную.

Середину массива мы определяем как array.length / 2. В случае с чётным количеством элементов мы пройдём ровно первую половину элементов. В случае с нечётным количеством центральный элемент мы трогать не будем, т.к. при инверсии он остаётся на месте.

Алгоритм инверсии массива

Обратите внимание, что мы модифицируем исходный массив, т.е. не расходуем дополнительную память (кроме разве что временной переменной). Это является преимуществом для очень больших объёмов данных.

Но массивы бывают не только целочисленные. Давайте модифицируем наш метод и сделаем его обобщённым.

public <T> void invertGenericArray(T[] array) {
    for (int i = 0; i < array.length / 2; i++) {
        T temp = array[i];
        array[i] = array[array.length - i - 1];
        array[array.length - i - 1] = temp;
    }
}

Метод invertGenericArray() типизируется произвольным типом T, поэтому поддерживает массивы любых типов. Сама логика метода осталась без изменений.



Комментарии

Добавить комментарий

×

devmark.ru