以下是用于数组旋转的Java程序-
public class Demo{
void rotate_left(int my_arr[], int d, int len){
d = d % len;
int i, j, k, temp;
int divisor = greatest_Common_divisor(d, len);
for (i = 0; i < divisor; i++){
temp = my_arr[i];
j = i;
while (true){
k = j + d;
if (k >= len)
k = k - len;
if (k == i)
break;
my_arr[j] = my_arr[k];
j = k;
}
my_arr[j] = temp;
}
}
void display_arr(int my_arr[], int size){
int i;
for (i = 0; i < size; i++)
System.out.print(my_arr[i] + " ");
}
int greatest_Common_divisor(int a, int b){
if (b == 0)
return a;
else
return greatest_Common_divisor(b, a % b);
}
public static void main(String[] args){
Demo my_inst = new Demo();
int my_arr[] = { 5, 7, 89, 91, 34, 21, 11, 0 };
System.out.println("向左旋转数组");
my_inst.rotate_left(my_arr, 2, 8);
System.out.println("从指定索引显示数组");
my_inst.display_arr(my_arr, 8);
}
}
输出结果
向左旋转数组
从指定索引显示数组
89 91 34 21 11 0 5 7
一个名为Demo的类包含一个名为rotate left的静态函数。这里,数组作为参数之一传递给函数,d是应该旋转数组的数量,len是数组的大小。通过传递d和len的值来调用最大公约数函数。for循环在函数调用的结果上迭代到最大公约数。
定义了一个名为'display_arr'的函数,用于显示数组元素。定义另一个函数'greatest_Common_divisor'来寻找两个数的最大公约数,它是一个递归函数。在main函数中,创建类的一个实例。还定义了一个数组,并在该对象上调用函数。使用'display_arr'函数显示相关数据。