Переупорядочьте массив так, чтобы четные элементы индекса были меньше, а нечетные элементы индекса были больше


Сложный уровень Легко
Часто спрашивают в Avalara Эпические Системы Фуркиты Roblox Тесла
массив

Постановка задачи

Вы дали массив of целые. Задача «Переупорядочить массив так, чтобы четные элементы индекса были меньше, а нечетные элементы индекса - больше», требует переупорядочить массив таким образом, чтобы элементы четного индекса были меньше, чем элементы нечетного индекса в модифицированном массиве.

Пример

arr[]={ 2,5,7,1,3,4 }
2 7 1 5 3 4

Объяснение: 2 находится в позиции четного индекса (индекс 0), поэтому он меньше, чем следующий нечетный индексированный элемент, 1 меньше, чем 5, который находится на нечетном индексированном элементе.

Алгоритм переупорядочивания массива таким образом, чтобы даже проиндексированные элементы были меньше, чем нечетные проиндексированные.

1. Traverse the array from 0 to n-1(less than the length of the array).
2. Check if the index is even and the next element is smaller than the current element then swap both of the numbers.
3. Check if the index is odd and the next element is greater than the current element, then swap both of the numbers.
4. Print the array.

объяснение

Учитывая массив длины n. Нас просят переупорядочить массив таким образом, чтобы четные элементы индекса были меньше, чем нечетные индексированные элементы. Мы будем делать это, меняя местами элементы, если условия не выполняются. Сначала мы должны проверить его тип, четный или нечетный, затем мы должны изменить массив.

Обходите массив от 0 до менее чем n-1, где n - длина массива. Возьмите до обхода на единицу меньше n-1, потому что мы собираемся сравнить его со следующим элементом, если он присутствует в массиве. Поэтому мы должны оставить это место для сравнения, иначе это произойдет из-за ошибки. Если мы зациклимся до тех пор, пока не станет меньше n, то он попадет в индекс, которого нет в массиве. Вот почему мы взяли от 0 до менее чем n - 1 обхода.

Мы пройдем по массиву и проверим каждое значение 'i', является ли оно четным или нечетным, если оно четное, а также array [i] больше, чем следующий элемент. Это означает, что следующая позиция элемента, поскольку i, определенно нечетная, и этот элемент с нечетной позицией меньше, чем элемент с четной позицией. Итак, мы собираемся поменять местами элементы, поскольку arr [i] - текущий четный элемент, а arr [i + 1] - следующий нечетно позиционированный элемент.

Теперь одновременно мы проверяем, является ли значение 'i' нечетным, а также, если элемент с этим индексом меньше, чем предыдущий элемент, тогда мы также собираемся поменять местами значения в массиве. После замены всех возможных значений массив, сформированный таким образом, будет окончательным и желаемым результатом.

Переупорядочьте массив так, чтобы четные элементы индекса были меньше, а нечетные элементы индекса были больше

Код:

Код C ++ для переупорядочения массива таким образом, чтобы даже проиндексированные элементы были меньше, чем нечетные.

#include <iostream>
using namespace std;

void evenOddComparison (int* arr, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        if (i % 2 == 0 && arr[i] > arr[i + 1])
            swap(arr[i], arr[i + 1]);

        if (i % 2 != 0 && arr[i] < arr[i + 1])
            swap(arr[i], arr[i + 1]);
    }
}

void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
        cout << arr[i] << " ";

    cout << endl;
}

int main()
{
    int arr[] = {  2,5,7,1,3,4  };
    int n = sizeof(arr) / sizeof(arr[0]);

    evenOddComparison (arr, n);

    printArray(arr, n);

    return 0;
}
2 7 1 5 3 4

Код Java для переупорядочивания массива таким образом, чтобы даже проиндексированные элементы были меньше, чем нечетные проиндексированные

class rearrangeArray
{
    public static void evenOddComparison(int arr[], int n)
    {

        int temp;
        for (int i = 0; i < n - 1; i++)
        {
            if (i % 2 == 0 && arr[i] > arr[i + 1])
            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
            if (i % 2 != 0 && arr[i] < arr[i + 1])
            {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
    }
    public static void printArray(int arr[], int size)
    {
        for (int i = 0; i < size; i++)
            System.out.print(arr[i] + " ");

        System.out.println();
    }
    public static void main(String[] args)
    {
        int arr[] = { 2,5,7,1,3,4 };
        int n = arr.length;

        evenOddComparison (arr, n);

        printArray(arr, n);
    }
}
2 7 1 5 3 4

Анализ сложности

Сложность времени

О (п) в котором «Н» - количество элементов в массиве. Мы только что прошли массив и поменяли местами элементы, поэтому временная сложность линейна.

Космическая сложность

O (1) потому что мы использовали постоянное пространство, но программа в целом занимает O (n) пространства.