Here is a version that uses a loop.
//reverse(A,n) reverses A[0,...,n-1]. void reverse(long A[], const int n) { int halfn = n/2; for(int i = 0; i < halfn; i++) { int k = n-i-1; long t = A[i]; A[i] = A[k]; A[k] = t; } }
Here is a version that uses recursion.
//reverse(A,n) reverses A[0,...,n-1]. void reverse(long A[], const int n) { if(n > 1) { // Swap A[0] and A[n-1]. long t = A[0]; A[0] = A[n-1]; A[n-1] = t; // Reverse the part of length n-2 in between the ends. reverse(A+1, n-2); } }