Clasa a IX-a · Tablouri unidimensionale (vectori)Read in English

Inversarea unui vector în C++

În engleză: Reversing an array

O(n)C++1743 de linii1 exemplu

Ideea

Interschimbăm primul element cu ultimul, al doilea cu penultimul și așa mai departe: v[i] cu v[n - i + 1]. Ne oprim la jumătate (i <= n / 2); dacă am merge până la n, fiecare pereche s-ar interschimba de două ori și vectorul ar reveni la forma inițială.

Descrierea în engleză

We swap the first element with the last, the second with the second to last, and so on: v[i] with v[n - i + 1]. We stop halfway (i <= n / 2); if we went up to n, every pair would be swapped twice and the array would return to its original order.

Complexitate
O(n)
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare

5
1 2 3 4 5

Ieșire așteptată

5 4 3 2 1

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

inversarea-vectorului.cpp
/*
 * Titlu: Inversarea unui vector
 * Clasa: 9
 * Capitol: Tablouri unidimensionale (vectori)
 * Descriere: Interschimbăm primul element cu ultimul, al doilea cu penultimul
 *            și așa mai departe: v[i] cu v[n - i + 1]. Ne oprim la jumătate
 *            (i <= n / 2); dacă am merge până la n, fiecare pereche s-ar
 *            interschimba de două ori și vectorul ar reveni la forma inițială.
 * Complexitate: O(n)
 *
 * Exemplu
 * Intrare:
 * 5
 * 1 2 3 4 5
 * Ieșire: 5 4 3 2 1
 */
#include <iostream>
using namespace std;

int v[1001];

int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }
    for (int i = 1; i <= n / 2; i++)
    {
        int aux = v[i];
        v[i] = v[n - i + 1];
        v[n - i + 1] = aux;
    }
    for (int i = 1; i <= n; i++)
    {
        cout << v[i] << ' ';
    }
    cout << '\n';
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.