编程之美2.17数组循环移位Java版

来源:互联网 发布:南风知我意温南txt 编辑:程序博客网 时间:2024/06/05 05:13
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */package Test;import java.util.Arrays;/** * * 2.17 数组循环移位 */public class ReverseArray {    public static void main(String[] args) {        int[] array = new int[]{1,2,3,4,5,6,7,8};        //解法一        int[] a1 = reverse_array1(array,array.length,6);        System.out.println(Arrays.toString(a1));        //解法二        int[] array2 = new int[]{1,2,3,4,5,6,7,8};        int[] a2 = reverse_array2(array2,array2.length,6);        System.out.println(Arrays.toString(a2));        //解法三 多用了一个数组的办法,附件变量超过两个        int[] array3 =new int[]{1,2,3,4,5,6,7,8};        int[] a3 = reverse_array3(array3,array3.length,6);        System.out.println(Arrays.toString(a3));    }    private static int[] reverse_array1(int[] array,int n ,int k) {        k %=n;        while(k>0){            int t = array[n-1];            for(int i =n-1;i>0;i--)                array[i]=array[i-1];            array[0] = t;            k--;        }        return array;    }    private static int[] reverse_array2(int[] array, int n, int k) {       k %=n;       reverse(array,0,n- k-1);       reverse(array,n-k,n-1);       reverse(array,0,n-1);       return array;    }    private static void reverse(int[] array, int b, int e) {        for(;b<e;b++,e--){            int tmp = array[e];            array[e] = array[b];            array[b] =  tmp;        }    }    private static int[] reverse_array3(int[] array, int n, int k) {        k %=n;        int[] a = new int[n];        for(int i =0;i<n;i++){            int num = i+k>=n?((i+k)%n):(i+k);            a[num] = array[i];        }        return a;    }}

0 0
原创粉丝点击