Array Reverse v C/C++/Java/Python/JavaScript
Pole obráceně nebo obrátit pole znamená změnu pozice každého čísla daného pole na jeho opačnou pozici od konce, tj. pokud je číslo na pozici 1, pak jeho nová pozice bude Array.length, podobně pokud je číslo na pozici 2, bude jeho nová pozice Array.length – 1, a tak dále.
Array Reverse v C/C++/Java/Python/JavaScript
Vzhledem k poli (nebo řetězci) je úkolem obrátit pole/řetězec.
Příklady:
Vstup: původní_pole[] = {1, 2, 3} Výstup: pole_obrácené[] = {3, 2, 1}
Vstup: původní_pole[] = {4, 5, 1, 2}
Výstup: array_reversed[] = {2, 1, 5, 4}
Obsah
- 1. Reverzní pole pomocí zvláštního pole (není na místě):
- 2. Reverzní pole pomocí smyčky (na místě):
- 3. Reverzní vestavěné metody pole (nena místě):
- 4. Pole Reverzní rekurze (na místě nebo bez umístění):
- 5. Reverzní zásobník pole (není na místě):
1. Pole Reverse Použití zvláštního pole (ne na místě):
- Vytvořte nové pole stejné velikosti jako původní pole.
- Zkopírujte prvky z původního pole do nového pole v opačném pořadí.
Níže je uvedena implementace výše uvedeného přístupu:
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; } Jáva /*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); } } Krajta 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(prvek + ' ')); } // Příklad použití: const originalArr = [1, 2, 3, 4, 5]; reverseArrayExtraArray(originalArr); Výstup
Reversed Array: 5 4 3 2 1
- Časová náročnost: Na)
- Kopírování prvků do nového pole je lineární operace.
- Složitost pomocného prostoru: Na)
- K uložení nového pole se používá další prostor.
2. Pole Reverzní Použití smyčky (na místě):
- Iterujte pole pomocí dva ukazatele (začátek a konec).
- Zaměňte prvky na počátečním a koncovém ukazateli.
- Posuňte počáteční ukazatel ke konci a koncový ukazatel směrem k začátku, dokud se navzájem nepotkají nebo nepřekříží.
Níže je uvedena implementace výše uvedeného přístupu:
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; } Jáva 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); } } Krajta # 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 ?> Výstup
1 2 3 4 5 6 Reversed array is 6 5 4 3 2 1
- Časová náročnost: Na)
- Smyčka prochází polovinou pole, takže je lineární s ohledem na velikost pole.
- Složitost pomocného prostoru: O(1)
- In-place obrácení, což znamená, že nezabere další prostor.
3. Reverzní vestavěné metody pole (nena místě):
- Použijte vestavěné metody jako
reverse>v Pythonu neboArray.Reverse>v C#.
Níže je uvedena implementace výše uvedeného přístupu:
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; } Jáva /*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)); } } Krajta 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);
Výstup
5 4 3 2 1
- Časová náročnost: Na
reverse>metoda má typicky lineární časovou složitost. - Složitost pomocného prostoru: Na)
- Další prostor se používá k uložení obráceného pole.
4. Pole Reverzní rekurze (na místě nebo bez umístění):
- Definujte rekurzivní funkci, která přijímá pole jako vstup.
- Prohoďte první a poslední prvek.
- Rekurzivně zavolejte funkci se zbývajícím podpolí.
Níže je uvedena implementace výše uvedeného přístupu:
C++ // 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>= konec) návrat; int temp = arr[start]; arr[start] = arr[konec]; arr[konec] = teplota; // Volání rekurzivní funkce reverseArray(arr, start + 1, end - 1); } /* Obslužná funkce pro tisk pole */ void printArray(int arr[], int velikost) { 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>= konec) návrat; temp = arr[start]; arr[start] = arr[konec]; arr[konec] = teplota; reverseArray(arr, začátek + 1, konec - 1); } /* Nástroj, který vytiskne pole na řádku */ void printArray(int arr[], int size) { int i; pro (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; } Jáva /*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>= konec) návrat; temp = arr[start]; arr[start] = arr[konec]; arr[konec] = teplota; reverseArray(arr, začátek + 1, konec - 1); } /* Nástroj, který vytiskne pole na řádku */ 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*/ Krajta # Recursive python program to reverse an array # Function to reverse A[] from start to end def reverseList(A, start, end): if start>= konec: return A[start], A[end] = A[end], A[start] reverseList(A, start+1, end-1) # Funkce ovladače k otestování výše uvedené funkce A = [1, 2, 3 , 4, 5, 6] print(A) reverseList(A, 0, 5) print('Obrácený seznam je') print(A) # Tento program vytvořil 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>= konec) návrat; temp = arr[start]; arr[start] = arr[konec]; arr[konec] = teplota; reverseArray(arr, začátek + 1, konec - 1); } /* Nástroj, který vytiskne pole na řádku */ 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>= $konec) { return; } $temp = $arr[$start]; $arr[$start] = $arr[$end]; $arr[$end] = $temp; // Rekurzivní volání funkce reverseArray($arr, $start + 1, $end - 1); } /* Obslužná funkce pro tisk pole */ funkce printArray(&$arr, $velikost) { 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); ?> Výstup
1 2 3 4 5 6 Reversed array is 6 5 4 3 2 1
- Časová náročnost: Na). Rekurze prochází každým prvkem jednou, takže je lineární.
- Složitost pomocného prostoru: O(n) pro non-in-place, O(log n) pro in-place (kvůli rekurznímu zásobníku).
5. Reverzní zásobník pole (není na místě):
- Posuňte každý prvek pole do zásobníku.
- Vyberte prvky ze zásobníku a vytvořte obrácené pole.
Níže je uvedena implementace výše uvedeného přístupu:
C++ #include ; #include ; #include ; void reverseArrayUsingStack(int arr[], int size) { std::stack zásobník; // Vložení prvků do zásobníku pro (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('Přetečení zásobníku
'); vrátit se; } stack->arr[++stack->top] = prvek; } int pop(struct Stack* stack) { if (stack->top == -1) { printf('Stack Underflow
'); exit(1); } return stack->arr[stack->top--]; } void reverseArrayUsingStack(int arr[], int velikost) { struct Stack stack; stack.top = -1; // Vložení prvků do zásobníku pro (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; } Jáva /*package whatever //do not write package name here */ import java.util.Stack; public class ReverseArrayUsingStack { public static void reverseArrayUsingStack(int[] arr) { Stack stack = new Stack(); // Vložení prvků do zásobníku for (int element : arr) { stack.push(element); } // Vybírá prvky ze zásobníku pro obrácení pole (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 + ' '); } } } Krajta 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 zásobník = nový zásobník (); // Vložení prvků do zásobníku foreach(int element v arr) { stack.Push(element); } // Vybírá prvky ze zásobníku pro obrácení pole (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); Výstup
Reversed Array: 5 4 3 2 1
- Časová náročnost: Na)
- Zatlačení a vysunutí každého prvku na/z zásobníku vyžaduje lineární čas.
- Složitost pomocného prostoru: Na)
- Další prostor slouží k uložení stohu.
6.Dvoubodový přístup
- Nastavte začátek na 0 a konec na velikost – 1.
- Vyměňte prvky, dokud se ukazatele setkají: Když je začátek menší než konec, zaměňte arr[start] za arr[end].
- Zaměňte arr[start] za arr[end].
- Začátek zvýšení a konec snížení.
- Pokračujte ve vyměňování a přesouvání ukazatelů, dokud nezačne křížek konec.
#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; } Jáva 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 Výstup:
Reversed Array: 5 4 3 2 1
Časová náročnost: O(n) – Tento algoritmus jednou iteruje polem, přičemž pro každý prvek provádí konstantní počet operací, což má za následek lineární časovou složitost.
Prostorová složitost: O(1) – Algoritmus obrátí pole na místě bez použití dalších datových struktur, takže vyžaduje konstantní prostor bez ohledu na velikost vstupního pole.