數組移位實現java版

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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章