1、测试
public static void main(String[] args) {
//没有校验参数 默认左移实现的代码
int i = 0;
int a[] =new int[500000000];
while (i < 500000000){
a[i] = i;
i++;
}
long start = System.currentTimeMillis();
a = f1(a,54275423);
// a = f2(a,54275423);
// a = f3(a,54275423);
long end = System.currentTimeMillis();
System.out.println((end -start) / 1000 +"秒");
// a = f2(a,3);
// f3(a,3);
}
2、实现
(1)
public static int[] f1(int [] a,int i){
//参数校验
int temp = 0;
for (int j =0;j < i;++j){
temp = a[a.length - 1];
for (int k = a.length - 1;k > 0;k--){
a[k] = a[k-1];
}
a[0] = temp;
}
return a;
}
(2)
public static int[] f2(int [] a,int i){
//参数校验
//找个位置作为中专
int [] b = new int[a.length - i];
System.arraycopy(a,0,b,0,a.length - i);
System.arraycopy(a,a.length - i,a,0,i);
System.arraycopy(b,0,a,i,a.length - i);
return a;
}
(3)
/**
*
* @param a
* @param i 左移位数
* @return
*/
public static int[] f2(int [] a,int i){
//参数校验
//交换1 ~ n-i
arraySwap(a,0,a.length - i);
//交换n-i + 1 ~ n
arraySwap(a,a.length - i,a.length);
//交换整体
arraySwap(a,0,a.length);
return a;
}
/**
*
* @param a
* @param start 方便交换数组的一部分
* @param end
* @return
*/
public static int[] arraySwap(int []a,int start,int end){
//参数校验
int temp = 0;
int index = end + start;
for (int i = start; i< index / 2;++i){
temp = a[i];
a[i] = a[index-1-i];
a[index-1-i] = temp;
}
return a;
}