循环移位

题目是这样的:

当输入字符数组abcdefgh,i=3,输出defghabc

当输入字符数组abcdefgh,i=4,输出efghabcd

Java算法实现:

public class BookStore {

    /**
     * 循环排序数组
     * @param c1
     * @param b
     */
    public static void test1(char[] c1,int b){
        int sum=c1.length;
        int b1=b;
        int j;
        char[] c2=new char[b];
        for(int i=0;i<b;i++){
            c2[i]=c1[i];
        }
        for(j=0;b1<sum;j++){
            c1[j]=c1[b1++];
        }
        for(int k=0;j<sum;k++){
           c1[j++]=c2[k];
        }

    }

    /**
     * 编程珠玑中的想法,把数组看成ab,对a取反,对b取反,
     * 然后对排序完了进行重新取反!
     * @param a
     * @param b
     */
    public static void test2(char[] a,int b){
        char[] c1=new char[b];
        char[] c2=new char[a.length-b];
        int a1=a.length;
        int i,j;

        for(i=0;i<b;i++){
            c1[i]=a[i];
        }
        for(j=0;j<a.length-b;j++){
            c2[j]=a[i++];
        }
        sortFanxu(c1);
        sortFanxu(c2);

        for(int k=0;k<a.length;k++){
            if(k>=b){
                a[--a1]=c2[--j];
            }
            else{
                a[k]=c1[k];
            }

        }
        sortFanxu(a);

    }

    /**
     * 实现数组的反转
     * @param a
     */
    public static void sortFanxu(char[] a){
        char a1[] =new char[a.length];
        int j=a.length;
        for(int i=0;i<a.length;i++){
            a1[i]=a[--j];
        }

        for(int i=0;i<a1.length;i++){
            a[i]=a1[i];
        }
    }



    public static void main(String[] args){
        char[] c=new char[]{'a','b','c','d','e','f','g'};
        BookStore.test2(c,3);
        for(int i=0;i<c.length;i++){
            System.out.print(c[i]+" ");
        }
    }

}
原文地址:https://www.cnblogs.com/huhu1203/p/7877897.html