在本教程中,我们将学习如何使用 Python 程序旋转数组。我们将写一个旋转函数(arry[],E,K),它将用于将大小为 K = 8 的 arry[]旋转 E = 4 个元素。
我们将数组旋转 4 个元素后得到如下数组:
阵列旋转的方法:
在本课程中,我们将讨论用户可以根据自己的需求使用不同的方法来旋转阵列。
方法 1:通过使用临时数组
在此方法中,我们将使用以下方法:
Input arry[] = [1, 3, 5, 7, 9, 11, 13, 15], E = 4, N = 8
第一步:我们将在临时数组中存储“E”元素
温度[] = [1,3,5,7]
第二步:我们将移动 arry[]的其余部分
arry[] = [9,11,13,15]
第三步:我们将存储“E”元素
arry[] = [9,11,13,15,1,3,5,7]
示例:
def rotate_array1(arry, K, E):
temp_1 = []
J = 0
while (J < E):
temp_1.append(arry[J])
J = J + 1
J = 0
while (E < K):
arry[J] = arry[E]
J = J + 1
E = E + 1
arry[:] = arry[: J] + temp_1
return arry
# Driver function to test above function
arry = [1, 3, 5, 7, 9, 11, 13, 15]
print ("Array after Rotation by 4 elements is: ", end = ' ')
print (rotate_array1(arry, len(arry), 4))
输出:
Array after Rotation by 4 elements is: [9, 11, 13, 15, 1, 3, 5, 7]
在上述方法中:
Time Complexity: O(K) [K = size of array]
Auxiliary Space: O(E) [E = number of elements to be rotated]
方法 2:逐个旋转元素
在此方法中,我们将使用以下方法:
rotate_array1(arry[],E,K)
- 我们将设置“for”条件,如果 J 等于 0 且小于 E,那么 rotate_array1 函数将把所有元素旋转一个
我们必须将旋转元素的 arry[0]逐个存储在临时变量“temp_1”中。那么我们将更多的 arry[1]到 arry[0],arry[2]到 arry[1]等等。最后,我们将在 arry[n-1]上有 temp_1。
示例:
def rotate_array1(arry, K, E):
for J in range(E):
rotate_by_one(arry, K)
#Now, we will define a function to rotate arry[] of size K by 1
def rotate_by_one(arry, K):
temp_1 = arry[0]
for J in range(K - 1):
arry[J] = arry[J + 1]
arry[K - 1] = temp_1
# Then, we will define a utility function for printing an array
def print_array(arry, size_1):
for J in range(size_1):
print ("%d" % arry[J], end = " ")
# At last, we will write a driver program for testing the above functions
arry = [1, 3, 5, 7, 9, 11, 13, 15]
rotate_array1(arry, 4, 8)
print ("The array after rotation: ")
print_array(arry, 8)
输出:
The array after rotation:
1 3 5 7 9 11 13 15
在上述方法中:
Time Complexity: O(K * E) [K = size of array]
[E = number of elements to be rotated]
Auxiliary Space: O(1)
方法 3:使用杂耍算法
在这个方法中,我们将把数组分成不同的集合,而不是逐个移动元素。
当集合的数量等于“K”和“E”的最大公除法器时,代码会将元素模式化为集合。
如果最大公除法器等于 1,那么元素将只移动到一个集合中。在这里,我们将从 temp_1 = arry[0]开始,它将继续从 arry[J + E]移动到 arry[J],最后,它将在正确的位置存储 temp_1。
我们来看一个例子,其中 K = 16,E = 4。最大公共分频器(G_C_D) = 4
arry[] = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
步骤-
- 首先,元素会被移动到第一个集合中——如下图所示:
完成此设定后,arry[]将等于[ 15 、12、13、14、 19、 16、17、18、 23 、20、21、22、11、23、24、25、26]
- 然后在第二盘:arry 将是[15、 16 、13、14、19、 20 、17、18、23、 24 、21、22、11、 12 、24、25、26]
- 第三盘:arry 将是【15、16、 17 、14、19、20、 21 、18、23、24、 25 、11、12、 13 、26】
- 最后,在第四集:arry 将是[15,16,17,18,19,20,21,22,23,24,25,26,11,12,13,14]
示例:
def rotate_array1(arry, K, E):
for J in range(G_C_D(E, K)):
# now, we will move the J-th values of blocks
temp_1 = arry[J]
S = J
while 1:
F = S + E
if F >= K:
F = F - K
if F == J:
break
arry[S] = arry[F]
S = F
arry[S] = temp_1
# Then, we will define a utility function for printing an array
def print_array(arry, size_1):
for J in range(size_1):
print ("%d" % arry[J], end = " ")
#Here, we will define a Function for getting G_C_D of Sets
def G_C_D(X, Y):
if Y == 0:
return X;
else:
return G_C_D(Y, X % Y)
# Driver program to test above functions
arry = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]
rotate_array1(arry, 4, 16)
print ("The array after rotation: ")
print_array(arry, 16)
输出:
The array after rotation:
[15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 11, 12, 13, 14]
在上述方法中:
Time Complexity: O(K ) [K = size of array]
Auxiliary Space: O(1)
方法 4:通过使用列表切片
在这个方法中,我们将使用列表切片来旋转数组的元素。
示例:
def rotate_List1(arry, E, K):
arry[:] = arry[E:K] + arry[0:E]
return arry
# We will write a driver program for testing the above functions
arry = [11, 12, 13, 14, 15, 16, 17, 18]
print ("The List is: ", arry)
print ("The rotated list is: ")
print (rotate_List1(arry, 4, len(arry)))
输出:
The List is: [11, 12, 13, 14, 15, 16, 17, 18]
The rotated list is:
[15, 16, 17, 18, 11, 12, 13, 14]
如果我们想旋转数组超过它的长度,我们可以使用 mod 方法。
假设我们要通过“E”旋转的数组是“K”大小,“E”大于“K”。在这种情况下,我们必须计算(E%K),然后我们可以通过 mod 计算后的输出进行旋转。
结论
在本文中,我们讨论了如何使用 Python 使用不同的方法来旋转给定的数组。