是什么让阵列在没有温度的情况下左转?

时间:2014-09-15 04:20:14

标签: c arrays rotation

所以我正在编写一个程序,如果为正,则向右移动数组,如果为负,则向左移动数组。我只是创建了两个不同的函数,一个按 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;
  }

4 个答案:

答案 0 :(得分:1)

向右旋转时,您使用jj=size-1开始内循环,并交换元素jj-1jj。向左旋转时,使用kk=0启动内部循环并交换元素kkkk+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