# Block swap algorithm for array rotation(Recursive) #Initialize A=[0..d-1], B=[d..size-1] #until size of A is equal to size of B # a) If A is shorter # 1. Divide B into Bl and Br such that Br is of same length as A. # 2. Swap A and Br to change ABlBr into BrBlA. # 3. Now A is at its final place, so recur on pieces of B. # b) If A is longer # 1. Divide A into Al and Ar such that Al is of same length as B. # 2. Swap Al and B to change AlArB into BArAl. # 3. Now B is at its final place, so recur on pieces of A. #Finally when A and B are of equal size, block swap them. # Recursive Approach #Driver function def rotate_array(a, d) #Input array "a" and rotation by "d" elemets finish =a.length-1 block_swap(a,0,finish,d) end def block_swap(a,start,finish,d) n=finish-start+1 if n>0 if d>n d%=n end if d==0 return a end if d==n-d swap(a,start,start+d,d) return a elsif d