C语言实现数组的循环移位的方法示例
2019-10-30 18:07
2256 查看
算法
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位,则实现的步骤是:
- 翻转数组的前n位元素;
- 翻转数组剩下的元素;
- 再翻转整个数组,然后就实现了循环左移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位,则实现的步骤是:
- 翻转数组的后n位元素;
- 翻转数组剩下的元素;
- 再翻转整个数组,然后就实现了循环右移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语言实现数组的循环左移,右移,翻转的示例
- C语言实现约瑟夫环,使用循环单链表和循环数组2种方法
- 如何在C语言使用位运算实现循环移位
- 用循环数组实现队列的方法
- C语言实现3个数从小到大排序/输出的方法示例
- C语言实现在数组A上有序合并数组B的方法
- C语言用栈实现十进制转换为二进制的方法示例
- JS实现数组去重,显示重复元素及个数的方法示例
- 数组中元素旋转移位的三种实现方法 --By LXW
- JS获取多维数组中相同键的值实现方法示例
- Shell实现程序造死循环的几种方法示例
- js 实现 list转换成tree的方法示例(数组到树)
- JavaScript基于对象方法实现数组去重及排序操作示例
- 循环移位的C语言实现
- Java数组实现循环队列的两种方法
- php实现xml转换数组的方法示例
- PHP使用数组实现矩阵数学运算的方法示例
- 数据结构-数组排序-二路归并-循环实现-C语言
- Python实现返回数组中第i小元素的方法示例
- JS实现字符串去重及数组去重的方法示例