Given an array and a number n, circular shift the array to right by n positions. Use absolutely no temporary storage.void ArrayCircularShift(int *arr, int arr_size, int n)
{
Reverse(arr, 0 , arr_size - 1);
Reverse(arr, 0, n - 1);
Reverse(arr, n, arr_size - 1);
}
void Reverse(int *arr, int start, int end)
{
while (start < end)
{
arr[start] = arr[start] ^ arr[end];
arr[end] = arr[start] ^ arr[end];
arr[start] = arr[start] ^ arr[end];
start++;
end--;
}
} |