Block swap algorithm for array rotation in Python
Block swap algorithm for array rotation is used to swap two non-overlapping regions of an array of equal size. It is one of the efficient algorithms for array rotation.
Input: arr = [1,2,3,4,5]
no. of rotations : 2
Output: [3,4,5,1,2]
Input: arr = [1,2,3,4,5,6]
no. of rotations : 3
Output: [4,5,6,1,2,3]Algorithm
Initialize arrays A and B such that A = arr[0..d-1] and B = arr[d..n-1] where d is the no. of rotations and n is the length of the array.
Until the length of array A becomes equal to the length of B, do the following steps:
- If A is shorter, we divide B into Bl and Br such that the length of Br equals the length as A. Swap A and Br such that ABlBr changes to BrBlA. Repeat the same on pieces of B.
- If A is longer, we divide A into Al and Ar such that the length of Al equals the length as B. Swap Al and B such that AlArB changes to BArAl. Repeat the same on pieces of A.
When the size of A and B become equal, swap them.
Implementation Example: arr = [1,2,3,4,5,6,7] No. of rotations = 2 => A = [1,2] and B = [3,4,5,6,7] len(A)<len(B) => Bl = [3,4,5] and Br = [6,7] Swap A and Br => [6,7], [3,4,5], [1,2] => [6,7,3,4,5], [1,2] and apply on [6,7,3,4,5] => A = [6,7] and B = [3,4,5] => Bl = [3] and Br = [4,5] Swap A and Br => [4,5,3], [6,7] and apply on [4,5,3] => A = [4,5] and B = [3] => Al = [4] and Ar = [5] Swap Al and B => [3], [5,4] and apply on [5,4] => A = [5] and B = [4] and len(A)=len(B) Swap => [4,5] Output: [3,4,5,6,7,1,2]
Python program for block Swap Algorithm for Array Rotation
Below is the Python code of the implementation of the block Swap Algorithm for Array Rotation:
def swap(arr, a, b, d):
for i in range(0,d):
temp = arr[a + i]
arr[a + i] = arr[b + i]
arr[b + i] = temp
def leftRotate(arr, d, n):
if(d == 0 or d == n):
return
i = d
j = n - d
while (i != j):
if(i < j): # A is shorter
swap(arr, d - i, d + j-i, i)
j -= i
else: # B is shorter
swap(arr, d - i, d, j)
i -= j
swap(arr, d - i, d, i) #final blockswap for i=j case
import array as arr
n = int(input("Enter the length of the array: "))
a = arr.array('i', [])
print("Enter the elements: ")
for i in range(int(n)):
e = int(input())
a.append(e)
rot = int(input("Enter no. of rotations: "))
print("Array Elements before rotation : ")
for i in range (0, n):
print (a[i], end = ' ')
leftRotate(a, rot, n )
print("\nArray Elements after rotation : ")
for i in range (0, n):
print (a[i], end = ' ')After running the above code, below is our result:
Enter the length of the array: 7 Enter the elements: 1 2 3 4 5 6 7 Enter no. of rotations: 3 Array Elements before rotation : 1 2 3 4 5 6 7 Array Elements after rotation : 4 5 6 7 1 2 3
I am Vamsi Krishna and you can read all my posts here
Also Read: Floyd Warshall Algorithm in Python
Thank You for Reading and Keep Learning 🙂
Leave a Reply