当前位置:   article > 正文

c语言将数组元素循环右移k位,把一个含有N个元素的数组循环右移K位

c语言数组右移k位

普通解法: 可以每次将数组中的元素右移一位,循环K次。每个元素右移N位后都会回到自己的位置上。因此,如果K > N,右移K-N之后的数组序列跟右移K位的结果是一样的。进而可得出一条通用的规律:右移K位之后的情形,跟右移K’= K % N位之后的情形一样。

高级解法(线性时间):假设原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4位。比较之后,不难看出,其中有两段的顺序是不变的:1234和abcd,可把这两段看成两个整体。右移K位(即右移K = K % N位)的过程就是把数组的两部分交换一下。变换的过程通过以下步骤完成:

逆序排列abcd:abcd1234 → dcba1234;

逆序排列1234:dcba1234 → dcba4321;

全部逆序:dcba4321 → 1234abcd。

void reverse(NSMutableArray *arr, NSInteger lo, NSInteger hi)

{

for (NSInteger i = lo,j = hi; i

NSObject *num = arr[i];

arr[i] = arr[j];

arr[j] = num;

}

}

int main(int argc, const char * argv[]) {

@autoreleasepool {

NSMutableArray *arr = [NSMutableArray arrayWithObjects:@(1),@(2),@(3),@(4),@(5),@(6), nil];

NSInteger k = 1;

k = k%arr.count;

if (k!=0) {

reverse(arr,0,arr.count-k-1);

reverse(arr,arr.count-k,arr.count-1);

reverse(arr, 0, arr.count-1);

}

NSLog(@"%@",arr);

}

return 0;

}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/567485
推荐阅读
相关标签
  

闽ICP备14008679号