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;
}