在本教程中,我们将学习如何使用Python程序旋转数组。我们将编写一个用于旋转数组的函数(array[], E, K),该函数将用于将大小为K=8的array[]旋转E=4个元素。

316-1.png

将数组旋转4个元素后得到如下数组:

316-2.png

数组旋转的方法:

在本节中,我们将讨论不同的方法,用户可以根据他们的需求来旋转数组。

方法1:使用临时数组

在这种方法中,我们将使用以下方法:

Input arry[] = [1, 3, 5, 7, 9, 11, 13, 15], E = 4, N = 8  

步骤1:我们将把"E"个元素存储在一个临时数组中

Temp[] = [1, 3, 5, 7]

步骤2:我们将移动剩余的array[]

array[] = [9, 11, 13, 15]

步骤3:我们将存储"E"个元素

array[] = [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:逐个旋转元素

在这种方法中,我们将使用以下方法:

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:使用Juggling算法

在这种方法中,我们将数组分成不同的集合,而不是一个一个地移动元素。

当集合的数量等于K和E的最大公约数时,代码将把元素移到集合中。

如果最大公约数等于1,则元素将仅移到一个集合中。在这里,我们从temp_1 = array[0]开始,将array[J + E]依次移到array[J],最后将temp_1存储在正确的位置。

让我们看一个例子,其中K=16,E=4。最大公除法器(G_CD)=4

arry[] = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26]  

步骤

  • 首先,元素将被移动到第一个集合中一一如下图所示:

316-3.png

在这个集合完成后,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]

如果我们想要旋转的数组长度大于其长度,我们可以使用模方法。

假设我们要以"E"为单位旋转的数组的大小为"K",而"E"大于"K"。在这种情况下,我们必须计算(E%K),然后我们可以在模运算后旋转。

结论

在本文中,我们讨论了如何使用Python使用不同的方法旋转给定的数组。

标签: Tkinter教程, Tkinter安装, Tkinter库, Tkinter入门, Tkinter学习, Tkinter入门教程, Tkinter, Tkinter进阶, Tkinter指南, Tkinter学习指南, Tkinter进阶教程, Tkinter编程