反手法

来源:互联网 发布:河南海融软件 编辑:程序博客网 时间:2024/06/11 19:42

        循环移位是一个比较基础的操作,在STL中已经给出函数rotate,包含于头文件algorithm,在SGI STL的实现版本中,对于随机访问迭代器,采用了反手法来实现循环移位。

        反手法具有线性时间的复杂度,因此算法性能较好,其对于数组的循环移位类似如下:

       

/***********************************************    循环移位:反手法原理较为简单:AB->BA:(1)A反转        (2)B反转(3)整体反转即BA=(A'B')'.***********************************************/#ifndef Rotate_Shift_H#define Rotate_Shift_H/*****************辅助程序*********************/template <typename Type>void Reverse(Type array[],int begin,int end){for(;begin<end;++begin,--end){Type temp=array[begin];array[begin]=array[end];array[end]=temp;}}/**********************************************/template <typename Type>void Rotate(Type array[],int size,int n,bool Direction=true){//默认实现循环右移n位if(Direction){Reverse(array,0,size-1-n);Reverse(array,size-n,size-1);Reverse(array,0,size-1);}//实现循环左移n位else{Reverse(array,0,n-1);Reverse(array,n,size-1);Reverse(array,0,size-1);}}#endif


       传递参数为数组首地址,数组长度,循环移位的个数以及左右移位的方向设定。

0 0