一种一维数组按从第i个位置“旋转”,例如abcdefgh, i = 3,则旋转后变为defghabc
- /*
- rotate a one-dimensinal vector of n elements left by i positions. For instance,
- with n=8 and i=3, the vector abcdefgh is rotated to defghabc. Simple code uses an
- n-element intermediate vector to do the job in n steps. Can you rotate the vector
- in time proportional to n using only a few dozen extra bytes of storage.
- */
- #include <iostream>
- using namespace std;
- void rotate(const int length, const int pos, int * vec);
- void reverse(int *vec, int beg, int end);
- int main()
- {
- int test[] = {1,2,3,4,5,6,7};
- rotate(7,7,test);
- for(int i = 0; i<= 6; i++)
- {
- cout<<test[i]<<endl;
- }
- }
- //采用3此倒序数组的方法rotate.
- void rotate(const int length, const int pos, int * vec)
- {
- reverse(vec, 0, pos-1);
- reverse(vec,pos,length-1);
- reverse(vec,0, length-1);
- }
- //倒排一个数组
- void reverse(int *vec, int beg, int end)
- {
- int sum = beg+end;
- int tmp;
- for(int i = beg; i<= (beg+end)/2; i++)
- {
- tmp = vec[i];
- vec[i] = vec[sum-i];
- vec[sum-i] = tmp;
- }
- }