**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 *