这些函数只将我的a [] 1位置内的元素向右移动,但我想将它移动到4位置。我是新手。这个家伙的任何暗示或帮助?
void shiftright (int a[], int size);
int main (void)
{
int a []= {1, 2, 3, 4, 5, 6, 7, 8};
shiftright( a, 8);
for ( int i=0; i<8; i++)
{
cout << a[i] << ' ';
}
return(0);
}
void shiftright (int a[], int size)
{
int temp;
int temp1;
for (int i=0; i<(size -1); i++)
{
temp = a[size-1];
a[size-1] = a[i];
a[i] = temp;
}
}
答案 0 :(得分:1)
如果表现不是关键值,您可以拨打&#39; shiftright&#39;三次(我假设你不能使用std :: rotate)。修改&#39; shiftright&#39;容纳4的移位功能将使其更少可重复使用(在大多数情况下)。例如,如果下次只需旋转两次,则可以使用相同的功能。
答案 1 :(得分:0)
以下是在案例array
中按顺序k
轮播k is 4
的替代方法。
void reverse_array(int* arr, int left, int right) {
int* p1 = arr + left;
int* p2 = arr + right;
while (p1 < p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
p1++;
p2--;
}
}
void shiftright(int* arr, int k, int size) {
int n = size;
reverse_array(arr, 0, n-1); //! First reverse the complete array
reverse_array(arr, 0, k-1); //! Now reverse first k elements
reverse_array(arr, k, n-1); //! Now reverse element from k to last
}
如果你正在编写这个函数只是为了学习目的而不是正常,否则建议使用标准函数,如std::rotate
,而不是编写自己的版本。