Реверс масиву або перевернути масив означає зміну позиції кожного числа заданого масиву на протилежну позицію від кінця, тобто якщо число знаходиться в позиції 1, то його новою позицією буде Array.length, аналогічно, якщо число знаходиться в позиції 2, то його нова позиція буде Array.length – 1 і так далі.
Реверс масиву в C/C++/Java/Python/JavaScript
Маючи масив (або рядок), завдання полягає в тому, щоб перевернути масив/рядок.
приклади:
введення: вихідний_масив[] = {1, 2, 3} Вихід: array_reversed[] = {3, 2, 1}
введення: вихідний_масив[] = {4, 5, 1, 2}
Вихід: array_reversed[] = {2, 1, 5, 4}
Зміст
- 1. Реверс масиву за допомогою додаткового масиву (не на місці):
- 2. Реверс масиву за допомогою циклу (на місці):
- 3. Вбудовані методи реверсу масиву (не на місці):
- 4. Зворотна рекурсія масиву (на місці або не на місці):
- 5. Зворотний стек масиву (не на місці):
1. Реверс масиву Використання додаткового масиву (не на місці):
- Створіть новий масив того самого розміру, що й вихідний масив.
- Скопіюйте елементи з вихідного масиву в новий масив у зворотному порядку.
Нижче наведено реалізацію вищезазначеного підходу:
C++ #include ; using namespace std; void reverseArrayExtraArray(int arr[], int size) { int reversedArr[size]; for (int i = 0; i < size; i++) { reversedArr[i] = arr[size - i - 1]; } // Print reversed array cout << 'Reversed Array: '; for (int i = 0; i < size; i++) { std::cout << reversedArr[i] << ' '; } } int main() { int originalArr[] = { 1, 2, 3, 4, 5 }; int size = sizeof(originalArr) / sizeof(originalArr[0]); reverseArrayExtraArray(originalArr, size); }> C #include void reverseArrayExtraArray(int arr[], int size) { int reversedArr[size]; for (int i = 0; i < size; i++) { reversedArr[i] = arr[size - i - 1]; } // Print reversed array printf('Reversed Array: '); for (int i = 0; i < size; i++) { printf('%d ', reversedArr[i]); } } int main() { int originalArr[] = { 1, 2, 3, 4, 5 }; int size = sizeof(originalArr) / sizeof(originalArr[0]); reverseArrayExtraArray(originalArr, size); return 0; }> Java /*package whatever //do not write package name here */ import java.io.*; public class ReverseArrayExtraArray { public static void reverseArrayExtraArray(int[] arr) { int[] reversedArr = new int[arr.length]; for (int i = 0; i < arr.length; i++) { reversedArr[i] = arr[arr.length - i - 1]; } // Print reversed array System.out.print('Reversed Array: '); for (int i : reversedArr) { System.out.print(i + ' '); } } public static void main(String[] args) { int[] originalArr = { 1, 2, 3, 4, 5 }; reverseArrayExtraArray(originalArr); } }> Python def reverse_array_extra_array(arr): reversed_arr = arr[::-1] # Print reversed array print('Reversed Array:', end=' ') for i in reversed_arr: print(i, end=' ') # Example usage: original_arr = [1, 2, 3, 4, 5] reverse_array_extra_array(original_arr)> C# using System; class Program { static void ReverseArrayExtraArray(int[] arr) { int[] reversedArr = new int[arr.Length]; for (int i = 0; i < arr.Length; i++) { reversedArr[i] = arr[arr.Length - i - 1]; } // Print reversed array Console.Write('Reversed Array: '); foreach (int num in reversedArr) { Console.Write(num + ' '); } } static void Main() { int[] originalArr = {1, 2, 3, 4, 5}; ReverseArrayExtraArray(originalArr); } }> JavaScript function reverseArrayExtraArray(arr) { const reversedArr = arr.slice().reverse(); // Print reversed array process.stdout.write('Reversed Array: '); reversedArr.forEach(element =>process.stdout.write(елемент + ' ')); } // Приклад використання: const originalArr = [1, 2, 3, 4, 5]; reverseArrayExtraArray(originalArr);> Вихід
Reversed Array: 5 4 3 2 1>
- Часова складність: O(n)
- Копіювання елементів у новий масив є лінійною операцією.
- Складність допоміжного простору: O(n)
- Для зберігання нового масиву використовується додатковий простір.
2. Реверс масиву Використання циклу (на місці):
- Ітерація по масиву за допомогою два вказівники (початок і кінець).
- Поміняти місцями елементи на початковому та кінцевому покажчиках.
- Перемістіть покажчик початку до кінця, а вказівник кінця до початку, доки вони не зустрінуться або не перетнуться.

Нижче наведено реалізацію вищезазначеного підходу:
C++ // Iterative C++ program to reverse an array #include ; using namespace std; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) { while (start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } /* Utility function to print an array */ void printArray(int arr[], int size) { for (int i = 0; i < size; i++) cout << arr[i] << ' '; cout << endl; } /* Driver function to test above functions */ int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; int n = sizeof(arr) / sizeof(arr[0]); // To print original array printArray(arr, n); // Function calling reverseArray(arr, 0, n - 1); cout << 'Reversed array is' << endl; // To print the Reversed array printArray(arr, n); return 0; }> C // Iterative C program to reverse an array #include /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) { int temp; while (start < end) { temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } /* Utility that prints out an array on a line */ void printArray(int arr[], int size) { int i; for (i = 0; i < size; i++) printf('%d ', arr[i]); printf('
'); } /* Driver function to test above functions */ int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; int n = sizeof(arr) / sizeof(arr[0]); printArray(arr, n); reverseArray(arr, 0, n - 1); printf('Reversed array is
'); printArray(arr, n); return 0; }> Java public class GFG { /* Function to reverse arr[] from start to end*/ static void reverseArray(int arr[], int start, int end) { int temp; while (start < end) { temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } /* Utility that prints out an array on a line */ static void printArray(int arr[], int size) { for (int i = 0; i < size; i++) System.out.print(arr[i] + ' '); System.out.println(); } // Driver code public static void main(String args[]) { int arr[] = {1, 2, 3, 4, 5, 6}; printArray(arr, 6); reverseArray(arr, 0, 5); System.out.print('Reversed array is
'); printArray(arr, 6); } }> Python # Iterative python program to reverse an array # Function to reverse A[] from start to end def reverseList(A, start, end): while start < end: A[start], A[end] = A[end], A[start] start += 1 end -= 1 # Driver function to test above function A = [1, 2, 3, 4, 5, 6] print(A) reverseList(A, 0, 5) print('Reversed list is') print(A) # This program is contributed by Pratik Chhajer> C# // Iterative C# program to reverse an // array using System; class GFG { /* Function to reverse arr[] from start to end*/ static void reverseArray(int[] arr, int start, int end) { int temp; while (start < end) { temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } /* Utility that prints out an array on a line */ static void printArray(int[] arr, int size) { for (int i = 0; i < size; i++) Console.Write(arr[i] + ' '); Console.WriteLine(); } // Driver function public static void Main() { int[] arr = { 1, 2, 3, 4, 5, 6 }; printArray(arr, 6); reverseArray(arr, 0, 5); Console.Write('Reversed array is
'); printArray(arr, 6); } } // This code is contributed by Sam007> JavaScript // Iterative Javascript program to reverse an array /* Function to reverse arr[] from start to end*/ function reverseArray(arr,start,end) { while (start < end) { var temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } /* Utility function to print an array */ function printArray(arr,size) { for (var i = 0; i < size; i++){ console.log(arr[i]); } } /* Driver function to test above functions */ var arr= [1, 2, 3, 4, 5, 6]; var n = 6; // To print original array printArray(arr, n); // Function calling reverseArray(arr, 0, n-1); console.log('Reversed array is'); printArray(arr, n);> PHP // Iterative PHP program // to reverse an array /* Function to reverse $arr from start to end*/ function reverseArray(&$arr, $start, $end) { while ($start < $end) { $temp = $arr[$start]; $arr[$start] = $arr[$end]; $arr[$end] = $temp; $start++; $end--; } } /* Utility function to print an array */ function printArray(&$arr, $size) { for ($i = 0; $i < $size; $i++) echo $arr[$i] . ' '; echo '
'; } // Driver code $arr = array(1, 2, 3, 4, 5, 6); // To print original array printArray($arr, 6); // Function calling reverseArray($arr, 0, 5); echo 'Reversed array is' .'
'; // To print the Reversed array printArray($arr, 6); // This code is contributed // by ChitraNayal ?>> Вихід
1 2 3 4 5 6 Reversed array is 6 5 4 3 2 1>
- Часова складність: O(n)
- Цикл проходить через половину масиву, тому він лінійний відносно розміру масиву.
- Складність допоміжного простору: О(1)
- Розворот на місці, тобто не використовується додатковий простір.
3. Вбудовані методи реверсу масиву (не на місці):
- Використовуйте такі вбудовані методи, як
reverse>на Python абоArray.Reverse>у C#.
Нижче наведено реалізацію вищезазначеного підходу:
C++ #include // for std::reverse #include int main() { int originalArray[] = { 1, 2, 3, 4, 5 }; int length = sizeof(originalArray) / sizeof(originalArray[0]); // Using inbuilt method in C++ std::reverse(originalArray, originalArray + length); // Print the reversed array for (int i = 0; i < length; i++) { std::cout << originalArray[i] << ' '; } return 0; }> Java /*package whatever //do not write package name here */ import java.util.Arrays; public class ArrayReverse { public static void main(String[] args) { int[] originalArray = { 1, 2, 3, 4, 5 }; // Using inbuilt method in Java int[] reversedArray = new int[originalArray.length]; for (int i = 0; i < originalArray.length; i++) { reversedArray[i] = originalArray[originalArray.length - 1 - i]; } // Print the reversed array System.out.println(Arrays.toString(reversedArray)); } }> Python original_array = [1, 2, 3, 4, 5] # Using inbuilt method in Python reversed_array = list(reversed(original_array)) # Print the reversed array print(reversed_array)>
C# using System; class Program { static void Main() { int[] originalArray = { 1, 2, 3, 4, 5 }; // Using inbuilt method in C# Array.Reverse(originalArray); // Print the reversed array foreach(int num in originalArray) { Console.Write(num + ' '); } } }> JavaScript let originalArray = [1, 2, 3, 4, 5]; // Using inbuilt method in JavaScript let reversedArray = originalArray.slice().reverse(); // Print the reversed array console.log(reversedArray);>
Вихід
5 4 3 2 1>
- Часова складність: На
reverse>метод зазвичай має лінійну часову складність. - Складність допоміжного простору: O(n)
- Додатковий простір використовується для зберігання перевернутого масиву.
4. Зворотна рекурсія масиву (на місці або не на місці):
- Визначте рекурсивну функцію, яка приймає масив як вхідні дані.
- Поміняйте місцями перший і останній елементи.
- Рекурсивно викликати функцію з підмасивом, що залишився.
Нижче наведено реалізацію вищезазначеного підходу:
адміністратор PowerShellC++
// Recursive C++ program to reverse an array #include ; using namespace std; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) { if (start>= закінчення) повернення; int temp = arr[початок]; arr[початок] = arr[кінець]; прибуття[кінець] = темп; // Рекурсивна функція, яка викликає reverseArray(arr, start + 1, end - 1); } /* Допоміжна функція для друку масиву */ void printArray(int arr[], int size) { for (int i = 0; i< size; i++) cout << arr[i] << ' '; cout << endl; } /* Driver function to test above functions */ int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; // To print original array printArray(arr, 6); // Function calling reverseArray(arr, 0, 5); cout << 'Reversed array is' << endl; // To print the Reversed array printArray(arr, 6); return 0; }> C // Recursive C program to reverse an array #include ; /* Function to reverse arr[] from start to end*/ void reverseArray(int arr[], int start, int end) { int temp; if (start>= закінчення) повернення; temp = arr[початок]; arr[початок] = arr[кінець]; прибуття[кінець] = темп; reverseArray(arr, початок + 1, кінець - 1); } /* Утиліта, яка друкує масив у рядку */ void printArray(int arr[], int size) { int i; для (i = 0; i< size; i++) printf('%d ', arr[i]); printf('
'); } /* Driver function to test above functions */ int main() { int arr[] = { 1, 2, 3, 4, 5, 6 }; printArray(arr, 6); reverseArray(arr, 0, 5); printf('Reversed array is
'); printArray(arr, 6); return 0; }> Java /*package whatever //do not write package name here */ import java.io.*; class ReverseArray { /* Function to reverse arr[] from start to end*/ static void reverseArray(int arr[], int start, int end) { int temp; if (start>= закінчення) повернення; temp = arr[початок]; arr[початок] = arr[кінець]; прибуття[кінець] = темп; reverseArray(arr, початок + 1, кінець - 1); } /* Утиліта, яка друкує масив у рядку */ static void printArray(int arr[], int size) { for (int i = 0; i< size; i++) System.out.print(arr[i] + ' '); System.out.println(''); } /*Driver function to check for above functions*/ public static void main(String[] args) { int arr[] = { 1, 2, 3, 4, 5, 6 }; printArray(arr, 6); reverseArray(arr, 0, 5); System.out.println('Reversed array is '); printArray(arr, 6); } } /*This article is contributed by Devesh Agrawal*/> Python # Recursive python program to reverse an array # Function to reverse A[] from start to end def reverseList(A, start, end): if start>= кінець: return A[початок], A[кінець] = A[кінець], A[початок] reverseList(A, початок+1, кінець-1) # Функція драйвера для перевірки функції A = [1, 2, 3 , 4, 5, 6] print(A) reverseList(A, 0, 5) print('Обернутий список') print(A) # Цю програму надав Pratik Chhajer> C# // C# program to reverse an array using System; class GFG { /* Function to reverse arr[] from start to end*/ static void reverseArray(int[] arr, int start, int end) { int temp; if (start>= закінчення) повернення; temp = arr[початок]; arr[початок] = arr[кінець]; прибуття[кінець] = темп; reverseArray(arr, початок + 1, кінець - 1); } /* Утиліта, яка друкує масив у рядку */ static void printArray(int[] arr, int size) { for (int i = 0; i< size; i++) Console.Write(arr[i] + ' '); Console.WriteLine(''); } // Driver Code public static void Main() { int[] arr = { 1, 2, 3, 4, 5, 6 }; printArray(arr, 6); reverseArray(arr, 0, 5); Console.WriteLine('Reversed array is '); printArray(arr, 6); } } // This code is contributed by Sam007> JavaScript // Recursive Javascript program to reverse an array /* Function to reverse arr[] from start to end*/ function reverseArray(arr,start,end) { var temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; // Recursive Function calling if (start+1 PHP // Recursive PHP program to reverse an array /* Function to reverse $arr[] from $start to $end */ function reverseArray(&$arr, $start, $end) { if ($start>= $end) { return; } $temp = $arr[$start]; $arr[$start] = $arr[$end]; $arr[$end] = $temp; // Рекурсивна функція, яка викликає reverseArray($arr, $start + 1, $end - 1); } /* Службова функція для друку масиву */ function printArray(&$arr, $size) { for ($i = 0; $i< $size; $i++) { echo $arr[$i] . ' '; } echo '
'; } // Driver function to test above functions $arr = array(1, 2, 3, 4, 5, 6); // To print original array printArray($arr, 6); // Function calling reverseArray($arr, 0, 5); echo 'Reversed array is' . '
'; // To print the Reversed array printArray($arr, 6); ?>> Вихід
1 2 3 4 5 6 Reversed array is 6 5 4 3 2 1>
- Часова складність: O(n). Рекурсія проходить через кожен елемент один раз, тому вона лінійна.
- Складність допоміжного простору: O(n) для не на місці, O(log n) для на місці (через стек рекурсії).
5. Зворотний стек масиву (не на місці):
- Помістіть кожен елемент масиву в стек.
- Витягніть елементи зі стеку, щоб сформувати обернений масив.
Нижче наведено реалізацію вищезазначеного підходу:
C++ #include ; #include ; #include ; void reverseArrayUsingStack(int arr[], int size) { std::stack стек; // Надсилання елементів у стек для (int i = 0; i< size; i++) { stack.push(arr[i]); } // Pop elements from the stack to reverse the array for (int i = 0; i < size; i++) { arr[i] = stack.top(); stack.pop(); } } int main() { int arr[] = { 1, 2, 3, 4, 5 }; int size = sizeof(arr) / sizeof(arr[0]); reverseArrayUsingStack(arr, size); std::cout << 'Reversed Array: '; for (int i = 0; i < size; i++) { std::cout << arr[i] << ' '; } return 0; }> C #include ; #include ; #define MAX_SIZE 100 struct Stack { int arr[MAX_SIZE]; int top; }; void push(struct Stack* stack, int element) { if (stack->top == MAX_SIZE - 1) { printf('Переповнення стека
'); повернення; } stack->arr[++stack->top] = елемент; } int pop(struct Stack* stack) { if (stack->top == -1) { printf('Stack Underflow
'); вихід (1); } return stack->arr[stack->top--]; } void reverseArrayUsingStack(int arr[], int size) { struct Stack stack; stack.top = -1; // Надсилання елементів у стек для (int i = 0; i< size; i++) { push(&stack, arr[i]); } // Pop elements from the stack to reverse the array for (int i = 0; i < size; i++) { arr[i] = pop(&stack); } } int main() { int arr[] = { 1, 2, 3, 4, 5 }; int size = sizeof(arr) / sizeof(arr[0]); reverseArrayUsingStack(arr, size); printf('Reversed Array: '); for (int i = 0; i < size; i++) { printf('%d ', arr[i]); } return 0; }> Java /*package whatever //do not write package name here */ import java.util.Stack; public class ReverseArrayUsingStack { public static void reverseArrayUsingStack(int[] arr) { Stack стек = новий стек(); // Надішліть елементи в стек for (int element : arr) { stack.push(element); } // Висунути елементи зі стеку, щоб перевернути масив для (int i = 0; i< arr.length; i++) { arr[i] = stack.pop(); } } public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; reverseArrayUsingStack(arr); System.out.print('Reversed Array: '); for (int element : arr) { System.out.print(element + ' '); } } }> Python def reverse_array_using_stack(arr): stack = [] # Push elements onto the stack for element in arr: stack.append(element) # Pop elements from the stack to reverse the array for i in range(len(arr)): arr[i] = stack.pop() # Example usage: arr = [1, 2, 3, 4, 5] reverse_array_using_stack(arr) print('Reversed Array:', arr)> C# using System; using System.Collections.Generic; class Program { static void ReverseArrayUsingStack(int[] arr) { Stack стек = новий стек (); // Надішліть елементи в стек foreach(int element in arr) { stack.Push(element); } // Висунути елементи зі стеку, щоб перевернути масив для (int i = 0; i< arr.Length; i++) { arr[i] = stack.Pop(); } } static void Main() { int[] arr = { 1, 2, 3, 4, 5 }; ReverseArrayUsingStack(arr); Console.Write('Reversed Array: '); foreach(int element in arr) { Console.Write(element + ' '); } } }> JavaScript function reverseArrayUsingStack(arr) { let stack = []; // Push elements onto the stack for (let i = 0; i < arr.length; i++) { stack.push(arr[i]); } // Pop elements from the stack to reverse the array for (let i = 0; i < arr.length; i++) { arr[i] = stack.pop(); } } // Example usage: let arr = [1, 2, 3, 4, 5]; reverseArrayUsingStack(arr); console.log('Reversed Array:', arr);> Вихід
Reversed Array: 5 4 3 2 1>
- Часова складність: O(n)
- Проштовхування та витягування кожного елемента в/зі стека потребує лінійного часу.
- Складність допоміжного простору: O(n)
- Додатковий простір використовується для зберігання стопки.
6. Підхід двох вказівників
- Встановіть початок на 0 і кінець на розмір – 1.
- Поміняйте місцями елементи до зустрічі вказівників: якщо початок менше ніж кінець, поміняйте місцями arr[start] на arr[end].
- Поміняти місцями arr[початок] на arr[кінець].
- Початок збільшення та кінець зменшення.
- Продовжуйте міняти місцями та переміщати покажчики, доки початок не закінчиться.
#include void reverseArrayTwoPointer(int arr[], int size) { int start = 0; int end = size - 1; while (start < end) { // Swap elements at start and end positions int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; // Move start forward and end backward start++; end--; } } int main() { int arr[] = { 1, 2, 3, 4, 5 }; int size = sizeof(arr) / sizeof(arr[0]); reverseArrayTwoPointer(arr, size); std::cout << 'Reversed Array: '; for (int i = 0; i < size; i++) { std::cout << arr[i] << ' '; } return 0; }> Java public class ReverseArray { public static void reverseArrayTwoPointer(int[] arr) { int start = 0; int end = arr.length - 1; while (start < end) { // Swap elements at start and end positions int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; // Move start forward and end backward start++; end--; } } public static void main(String[] args) { int[] arr = { 1, 2, 3, 4, 5 }; reverseArrayTwoPointer(arr); System.out.print('Reversed Array: '); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + ' '); } } } // This code is contributed by Shivam> Вихід:
Reversed Array: 5 4 3 2 1>
Часова складність: O(n) – цей алгоритм проходить через масив один раз, виконуючи постійну кількість операцій для кожного елемента, що призводить до лінійної складності часу.
Космічна складність: O(1) – Алгоритм змінює масив на місце без використання будь-яких додаткових структур даних, таким чином вимагаючи постійного простору незалежно від розміру вхідного масиву.