所以我正在编写一个程序,如果为正,则向右移动数组,如果为负,则向左移动数组。我只是创建了两个不同的函数,一个按 X 向右旋转,如果值为 X ,则左 X 如果值 -X 即可。因此,如果值为-4,我可以将左侧函数应用于4.基本上 rotate_r 使我的数组向右旋转。我希望我的 rotate_l 向左移动我的数组。我不知道如何扭转rotate_r的效果使rotate_l走向相反的方向。这是我的代码。 TLDR;基本上我想用oo制作函数,kk向左移动数组而不是右移
#include<stdio.h>
void rotate_r(int *array, int size, int r)
{
int ii, jj;
for (ii = 1; ii <= r; ii++)
{
for (jj = size-1; jj > 0; jj--)
{
/* swapping the array[jj] and array[jj-1] elements without
using temporary variable */
array[jj-1] = array[jj-1] + array[jj];
array[jj] = array[jj-1] - array[jj];
array[jj-1] = array[jj-1] - array[jj];
}
}
return;
}
void rotate_l(int *array, int size, int l)
{
int oo, kk;
for (oo = 1; oo <= l; oo++)
{
for (kk = size-1; kk > 0; kk--)
{
/* swapping the array[jj] and array[jj-1] elements without
using temporary variable */
array[kk-1] = array[kk-1] + array[kk];
array[kk] = array[kk-1] - array[kk];
array[kk-1] = array[kk-1] - array[kk];
}
}
return;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10}, oo;
rotate_l(a, 10, 4);
printf("After rotating a by 4\n");
for (oo = 0; oo < 10; oo++)
{
printf("%5d", a[oo]);
}
printf("\n");
return 0;
}
答案 0 :(得分:1)
向右旋转时,您使用jj=size-1
开始内循环,并交换元素jj-1
和jj
。向左旋转时,使用kk=0
启动内部循环并交换元素kk
和kk+1
。
void rotate_l(int *array, int size, int l)
{
int oo, kk;
for (oo = 1; oo <= l; oo++)
{
for (kk = 0; kk < size-1; ++kk)
{
/* swapping the array[kk] and array[kk+1] elements without
using temporary variable */
array[kk] = array[kk+1] + array[kk];
array[kk+1] = array[kk] - array[kk+1];
array[kk] = array[kk] - array[kk+1];
}
}
return;
}
答案 1 :(得分:1)
要向左旋转,您需要从数组的开头开始交换。所以,像这样改变你的rotate_l()函数。看看内循环条件。
void rotate_l(int *array, int size, int l)
{
int oo, kk;
for (oo = 1; oo <= l; oo++)
{
for (kk = 1; kk <size; kk++)
{
/* swapping the array[jj] and array[jj-1] elements without
using temporary variable */
array[kk-1] = array[kk-1] + array[kk];
array[kk] = array[kk-1] - array[kk];
array[kk-1] = array[kk-1] - array[kk];
}
}
return;
}
但是,我建议你使用圆形阵列来获得最佳复杂性。 这是link
答案 2 :(得分:0)
void rotate_l(int *array, int size, int l)
{
int oo, kk;
for (oo = 1; oo <= l; oo++)
{
for (kk = 0; kk < size-1; ++kk)
{
/* swapping the array[kk] and array[kk+1] elements without
using temporary variable */
array[kk] = array[kk+1] + array[kk];
array[kk+1] = array[kk] - array[kk+1];
array[kk] = array[kk] - array[kk+1];
}
}
return;
}
@R Sahu这是我正在寻找的确切答案。非常感谢你。
答案 3 :(得分:0)
在 ruby 中,它非常简单。
def array_rotate(arr)
i, j = arr.length - 1, 0
arr[j],arr[i], i, j = arr[i], arr[j], i - 1, j + 1 while(j<arr.length/2)
puts "#{arr}"
end