**Write a Program for Left Rotation (Shift) of Array by one.**

Example,

Input: 1 2 3 4 5 6 Output: 2 3 4 5 6 1

This problem can be solved in many ways, we will discuss some of them.

## Left Rotation of Array without swapping

This method does not involve swapping.

We overwrite the **ith** index element with **(i+1)th** element from **Left-To-Right**.

But by doing so, we lose the first element of the array. So, we use a temporary variable **temp** to store the first element of the array.

After we are done overwriting, we set last index of array to **temp**.

See the illustration for better understanding,

### Steps

- Initialize
**i = 0**. - Set
**temp = arr[0]**. - Repeat the following Steps while
**i < N – 1****a[i] = a[i+1]****++i**

- Set
**arr[N-1] = temp**.

### Program in c/c++

#include<stdio.h> void leftRotateArray(int *arr,int n){ int temp, i; temp = arr[0]; for(i=0;i<n-1;++i){ arr[i] = arr[i+1]; } arr[n-1] = temp; } int main(){ int arr[100]; int n,i; printf("\n\tEnter Size of Array: "); scanf("%d",&n); printf("\n\tEnter Array Elements: "); for(i = 0;i<n;++i){ scanf("%d",&arr[i]); } leftRotateArray(arr,n); printf("\n\tArray After Left-Rotation by one: "); for(i = 0;i<n;++i){ printf("%d ",arr[i]); } printf("\n"); }

#### Output

## Left-Rotation of Array with Swapping

It can be done in 2 ways

### Method 1

In this method, we keep swapping adjacent elements of the array which results in the Left-Rotation of the array by 1.

The swapping is performed from **Left-To-Right**.

See the illustration for better understanding,

### Steps

- Initialize
**i = 0**. - Repeat the following Steps while
**i < N-**1**SWAP(arr[i] , arr[i+1]).****++i**.

### Program in c/c++

#include<stdio.h> void leftRotateArray(int *arr,int n){ int temp; for(int i=0;i<n-1;++i){ // swapping a[i] and a[i+1] temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = temp; } } int main(){ int arr[100]; int n,i; printf("\n\tEnter Size of Array: "); scanf("%d",&n); printf("\n\tEnter Array Elements: "); for(i = 0;i<n;++i){ scanf("%d",&arr[i]); } leftRotateArray(arr,n); printf("\n\tArray After Left-Rotation by one: "); for(i = 0;i<n;++i){ printf("%d ",arr[i]); } printf("\n"); }

#### Output

### Method 2

This method is also based on swapping.

But instead of swapping adjacent elements, we swap each index value with the last index value.

The swapping is done from **Right-To-Left**.

See the following illustration,

### Steps

- Initialize
**i = N-2**. - Repeat the following steps while
**i >= 0**.**SWAP( arr[i] , arr[N-1] )**.**i = i – 1**.

### Program in c/c++

#include<stdio.h> void leftRotateArray(int *arr,int n){ int temp,i; for( i=n-2; i>=0; --i){ // swapping a[i] and a[n-1] temp = arr[n-1]; arr[n-1] = arr[i]; arr[i] = temp; } } int main(){ int arr[100]; int n,i; printf("\n\tEnter Size of Array: "); scanf("%d",&n); printf("\n\tEnter Array Elements: "); for(i = 0;i<n;++i){ scanf("%d",&arr[i]); } leftRotateArray(arr,n); printf("\n\tArray After Left-Rotation by one: "); for(i = 0;i<n;++i){ printf("%d ",arr[i]); } printf("\n"); }

#### Output

## Complexity

Time Complexity: **O(N)**

Space Complexity: **O(1)**

for all methods.

## References

**What to study next?**

*Leave Comment if You face any Problem *