# 如何在Java中向左或向右旋转数组？

## 本文概述

### 向左旋转：数组从左向右旋转D元素

arr[] = {1, 2, 3, 4, 5}
D = 2

D = 7

1)将前d个元素存储在temp数组中：temp [] = [1, 2]
2)移位arr[]的其余部分：arr[] = [3, 4, 5]
3)存储回D个元素：arr[] = [3, 4, 5, 1, 2]

``````//Java program to left rotate
//an array by D elements

class GFG {

//Function to left rotate arr[]
//of size N by D
void leftRotate( int arr[], int d, int n)
{
//create temp array of size d
int temp[] = new int [d];

//copy first d element in array temp
for ( int i = 0 ; i <d; i++)
temp[i] = arr[i];

//move the rest element to index
//zero to N-d
for ( int i = d; i <n; i++) {
arr[i - d] = arr[i];
}

//copy the temp array element
//in origninal array
for ( int i = 0 ; i <d; i++) {
arr[i + n - d] = temp[i];
}
}

//utility function to print an array
void printArray( int arr[], int n)
{
for ( int i = 0 ; i <n; i++)
System.out.print(arr[i] + " " );
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.leftRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``3 4 5 1 2``

1)将arr[0]交换为arr[1]
2)将arr[1]交换为arr[2]

3)将arr[N-1]交换为arr[N]
4)重复1、2、3至D次

``````//Java program to left rotate
//an array by d elements

class GFG {

//Function to left rotate arr[]
//of size n by d
void leftRotate( int arr[], int d, int n)
{
for ( int i = 0 ; i <d; i++)
leftRotatebyOne(arr, n);
}

void leftRotatebyOne( int arr[], int n)
{
int i, temp;
temp = arr[ 0 ];
for (i = 0 ; i <n - 1 ; i++)
arr[i] = arr[i + 1 ];
arr[i] = temp;
}

//utility function to print an array
void printArray( int arr[], int n)
{
for ( int i = 0 ; i <n; i++)
System.out.print(arr[i] + " " );
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.leftRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``3 4 5 1 2``

``````//Java program to left rotate
//an array by d elements

class GFG {

//Function to left rotate arr[]
//of siz N by D
void leftRotate( int arr[], int d, int n)
{
//To handle if d>= n
d = d % n;
int i, j, k, temp;
int g_c_d = gcd(d, n);

for (i = 0 ; i <g_c_d; i++) {

//move i-th values of blocks
temp = arr[i];
j = i;
while ( true ) {
k = j + d;
if (k>= n)
k = k - n;
if (k == i)
break ;
arr[j] = arr[k];
j = k;
}
arr[j] = temp;
}
}

//function to print an array
void printArray( int arr[], int size)
{
int i;
for (i = 0 ; i <size; i++)
System.out.print(arr[i] + " " );
}

//Function to get gcd of a and b
int gcd( int a, int b)
{
if (b == 0 )
return a;
else
return gcd(b, a % b);
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.leftRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``3 4 5 1 2``

### 向右旋转：数组从右向右旋转D元素

D = 2

``````Input arr[] = [1, 2, 3, 4, 5], D = 2
1) Store the first d elements in a temp array
temp[] = [1, 2, 3]
2) Shift rest of the arr[]
arr[] = [4, 5]
3) Store back the D elements
arr[] = [4, 5, 1, 2, 3]``````

``````//Java program to rotate an array by
//D elements

class GFG {
//Function to right rotate arr[]
//of size N by D

void rightRotate( int arr[], int d, int n)
{
//create temp array of size d
int temp[] = new int [n - d];

//copy first N-D element in array temp
for ( int i = 0 ; i <n - d; i++)
temp[i] = arr[i];

//move the rest element to index
//zero to D
for ( int i = n - d; i <n; i++) {
arr[i - d - 1 ] = arr[i];
}

//copy the temp array element
//in origninal array
for ( int i = 0 ; i <n - d; i++) {
arr[i + d] = temp[i];
}
}

//utility function to print an array
void printArray( int arr[], int n)
{
for ( int i = 0 ; i <n; i++)
System.out.print(arr[i] + " " );
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.rightRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``4 5 1 2 3``

1)将arr[N]交换为arr[N-1]
2)将arr[N-1]交换为arr[N-2]
。 。 。
3)将arr[2]交换为arr[1]
4)重复1、2、3至D次

``````//Java program to rotate an array by
//d elements

class GFG {

//Function to right rotate arr[]
//of size n by d
void rightRotate( int arr[], int d, int n)
{
for ( int i = n; i> d; i--)
rightRotatebyOne(arr, n);
}

void rightRotatebyOne( int arr[], int n)
{
int i, temp;
temp = arr[ 0 ];
for (i = 0 ; i <n - 1 ; i++)
arr[i] = arr[i + 1 ];
arr[i] = temp;
}

//utility function to print an array
void printArray( int arr[], int n)
{
for ( int i = 0 ; i <n; i++)
System.out.print(arr[i] + " " );
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.rightRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``4 5 1 2 3``

``````//Java program to rotate an array by
//d elements

class GFG {

//Function to right rotate arr[]
//of siz N by D
void rightRotate( int arr[], int d, int n)
{

//to use as left rotation
d = n - d;
d = d % n;
int i, j, k, temp;
int g_c_d = gcd(d, n);
for (i = 0 ; i <g_c_d; i++) {

//move i-th values of blocks
temp = arr[i];
j = i;
while ( true ) {
k = j + d;
if (k>= n)
k = k - n;
if (k == i)
break ;
arr[j] = arr[k];
j = k;
}
arr[j] = temp;
}
}

//UTILITY FUNCTIONS

//function to print an array
void printArray( int arr[], int size)
{
int i;
for (i = 0 ; i <size; i++)
System.out.print(arr[i] + " " );
}

//Function to get gcd of a and b
int gcd( int a, int b)
{
if (b == 0 )
return a;
else
return gcd(b, a % b);
}

//Driver program to test above functions
public static void main(String[] args)
{
GFG rotate = new GFG();
int arr[] = { 1 , 2 , 3 , 4 , 5 };
rotate.rightRotate(arr, 2 , arr.length);
rotate.printArray(arr, arr.length);
}
}``````

``4 5 1 2 3``

• 回顶