美文网首页
C语言实现数组的循环移位

C语言实现数组的循环移位

作者: JerryShieh | 来源:发表于2019-01-11 13:01 被阅读0次

算法

Reverse Array (数组翻转)

code

void reverse(int array[], int left, int right)
{
   int l, r;
   for (l = left, r = right; l < r; l++, r--)
   {
        array[l] = array[l] ^ array[r];
        array[r] = array[l] ^ array[r];  // l ^ r ^ r = l ^ 0 = l.
        array[l] = array[l] ^ array[r];  // l ^ r ^ l = r ^ 0 = r;
   }
}

上述代码通过异或运算来高效实现变量值的交换,请记住:

  • 任何数与0异或的结果都是它本身。
  • 任何数与1异或的结果都是它的相反数。

循环左移

假设我们循环左移n位,则实现的步骤是:

  1. 翻转数组的n位元素;
  2. 翻转数组剩下的元素;
  3. 再翻转整个数组,然后就实现了循环左移n位的功能。

以上步骤的顺序也可以改为step2 -> step1 -> step3.

code:

reverse(array, 0, left_shift_num - 1);
reverse(array, left_shift_num, array_size - 1);
reverse(array, 0, array_size - 1);

循环右移

假设我们循环右移n位,则实现的步骤是:

  1. 翻转数组的n位元素;
  2. 翻转数组剩下的元素;
  3. 再翻转整个数组,然后就实现了循环右移n位的功能。

以上步骤的顺序也可以改为step2 -> step1 -> step3.

code:

reverse(array, 0, array_size - right_shift_num - 1);
reverse(array, array_size - right_shift_num, array_size - 1);
reverse(array, 0, array_size -1);

相关文章

  • C语言实现数组的循环移位

    算法 Reverse Array (数组翻转) code 上述代码通过异或运算来高效实现变量值的交换,请记住: 任...

  • 数组循环移位

  • 数组循环移位

    设计一个算法,把一个含有N个元素的数组循环右移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。1、简单的...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 数组遍历的方法总结

    第一种方式:for循环 Objective-C是基于C语言的,自然可以使用for循环 遍历数组: 遍历数组很简单没...

  • 2018/07/17

    c语言基础分支数组,2018/07/18运行程序,循环及数组 07/29基本类型 2018/7/30计划 c语言课...

  • C语言实现顺序存储结构(数组)

    C语言实现顺序存储结构(数组)

  • 表、栈和队列

    数据结构与算法分析-c语言描述抽象数据类型(ADT)1、表ADT可以用由数组实现。链表实现。双链表。循环链表。 -...

  • C语言数组以及循环

    输入缓存流残留问题解决方案 getchar();吸收缓存流里面的一个字符scanf("%c",&ch)getc(s...

  • OC:数组的遍历方式

    objective-c 语言 数组遍历的4种方式:1、普通for循环;2、快速for循环;3、特性block方法;...

网友评论

      本文标题:C语言实现数组的循环移位

      本文链接:https://www.haomeiwen.com/subject/kbztdqtx.html