按位置旋转一维数组算法

 

一种一维数组按从第i个位置“旋转”,例如abcdefgh, i = 3,则旋转后变为defghabc

Code:
  1. /*  
  2.   rotate a one-dimensinal vector of n elements left by i positions. For instance,  
  3.   with n=8 and i=3, the vector abcdefgh is rotated to defghabc. Simple code uses an  
  4.   n-element intermediate vector to do the job in n steps. Can you rotate the vector  
  5.   in time proportional to n using only a few dozen extra bytes of storage.  
  6. */  
  7. #include <iostream>   
  8. using namespace std;   
  9. void rotate(const int length, const int pos, int * vec);   
  10. void reverse(int *vec, int beg, int end);   
  11. int main()   
  12. {   
  13.     int test[] = {1,2,3,4,5,6,7};   
  14.     rotate(7,7,test);   
  15.     for(int i = 0; i<= 6; i++)   
  16.     {   
  17.         cout<<test[i]<<endl;   
  18.     }   
  19. }   
  20.   
  21. //采用3此倒序数组的方法rotate.   
  22. void rotate(const int length, const int pos, int * vec)   
  23. {   
  24.     reverse(vec, 0, pos-1);   
  25.     reverse(vec,pos,length-1);   
  26.     reverse(vec,0, length-1);   
  27. }   
  28.   
  29. //倒排一个数组   
  30. void reverse(int *vec, int beg, int end)   
  31. {   
  32.     int sum = beg+end;   
  33.     int tmp;   
  34.     for(int i = beg; i<= (beg+end)/2; i++)   
  35.     {   
  36.         tmp = vec[i];   
  37.         vec[i] = vec[sum-i];   
  38.         vec[sum-i] = tmp;   
  39.     }   
  40. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值