使用C++实现circshift函数
matlab中的circshift函数能对数组进行指定位置的循环位移操作,例如:
输入数组为 arr = {1, 2, 3, 4, 5}
输入位置为正数,表示右移 k = 2
输出数组为 arr = {4, 5, 1, 2, 3}
若输入k为负数,左移 k = -2
则输出数组为 arr = {3, 4, 5, 1, 2}
#include <iostream>
using namespace std;
/*
* circshift函数C++实现
* k为需要移动的位置,k大于0为右移,小于0为左移
*/
void circshift(int* A, int n, int k) {
k %= n;
if (k < 0)
{
k += n;
}
int* temp = new int[n];
for (int i = 0; i < n; ++i) {
temp[(i + k) % n] = A[i];
}
for (int i = 0; i < n; ++i) {
A[i] = temp[i];
}
}
int main() {
int A[5] = { 1, 2, 3, 4, 5 };
int n = sizeof(A) / sizeof(A[0]);
circshift(A, n, 2);
for (int i = 0; i < n; ++i) {
cout << A[i] << " ";
}
return 0;
}