#include <stdio.h> void reverse(int arr[], int n) { int start = 0, end = n - 1; while (start < end) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } int main() { int arr[] = {1, 2, 3, 4, 5}; int n = 5; reverse(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
The code swaps elements from the start and end moving inward, effectively reversing the array.
After reversal, the array elements print as: 5 4 3 2 1
#include <stdio.h> void reverse(int arr[], int start, int end) { if (start >= end) return; int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; reverse(arr, start + 1, end - 1); } int main() { int arr[] = {10, 20, 30, 40}; int n = 4; reverse(arr, 0, n - 1); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
The recursive function swaps the first and last elements, then calls itself for the inner subarray.
Resulting reversed array: 40 30 20 10
#include <stdio.h> void reverse(int arr[], int n) { int i; for (i = 0; i <= n / 2; i++) { int temp = arr[i]; arr[i] = arr[n - i]; arr[n - i] = temp; } } int main() { int arr[] = {1, 2, 3, 4}; int n = 4; reverse(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
The code accesses arr[n - i], but valid indices go up to n-1.
When i=0, arr[n - 0] = arr[4] is out of bounds causing runtime error.
#include <stdio.h> void reverse(int arr[], int n) { int start = 0, end = n - 1; while (start < end) { arr[start] ^= arr[end]; arr[end] ^= arr[start]; arr[start] ^= arr[end]; start++; end--; } } int main() { int arr[] = {7, 8, 9}; int n = 3; reverse(arr, n); for (int i = 0; i < n; i++) { printf("%d ", arr[i]); } return 0; }
The XOR swap swaps elements at start and end indices without extra space.
After reversal, array prints as: 9 8 7
All three methods visit each element once or swap pairs once, resulting in linear time O(n).
Recursion and XOR swap do not increase complexity beyond O(n).
