循环移位
题目是这样的:
当输入字符数组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]+" "); } } }