1.普通算法
2.塊交換算法
3.求逆算法
public class Cyc_shift {
static String str;
public static void main(String[] args){
str="12345";
char[] str1=exchange(3,str.toCharArray());
for(int i=0;i<str1.length;i++){
System.out.print(str1[i]);
}
}
/*普通算法*/
public static char[] usually(int n,char[] str){
char tmp;
System.out.println(str.length);
for(int i=0;i<n;i++){
tmp=str[str.length-1];
for(int j=str.length-1;j>0;j--){
str[j]=str[j-1];
}
str[0]=tmp;
}
return str;
}
/*塊交換算法*/
public static char[] exchange(int num,char[] str){
int end=str.length;
int start=0;
int point=end-num;
int m,n;
while(point!=end && point!=start){
m=point-start;
n=end-point;
change(point,min(m,n),str);
if(m>=n){
end=point;
point=point-n;
}else{
start=point;
point=point+m;
}
}
return str;
}
public static char[] change(int point,int n,char[] str){
char s;
int tmp=n-1;
for(int i=1;i<=n;i++){
s=str[point-i];
str[point-i]=str[point+tmp];
str[point+tmp]=s;
tmp--;
}
for(int i=0;i<str.length;i++){
System.out.print(str[i]);
}
System.out.println("");
return str;
}
public static int min(int m,int n){
if(m>=n){
return n;
}else{
return m;
}
}
/*求逆算法*/
public static char[] reverse(int a,int b,char[] str){
char temp;
while(true){
temp =str[a];
str[a]=str[b];
str[b]=temp;
a++;
b--;
if(a>=b)
break;
}
return str;
}
public static char[] treverse(int n,char[] str){
reverse(0,str.length-n-1,str);
reverse(str.length-n,str.length-1,str);
reverse(0,str.length-1,str);
return str;
}
}