数组逆序

来源:互联网 发布:python 函数定义输出 编辑:程序博客网 时间:2024/05/18 22:55

**一、算法思想**

 交换数组中第一个数与最后一个数,第二个数与倒数第二个数,直至开始索引和末尾索引指向相同位置。

如图所示:

**二、初步算法代码(少量偶然数据)**

注:随便的定义一个长度为5的数组,逆序之后结果是正确的。

代码:

class NiXv{public static void main(String[] args){int[] a={3,4,5,6,9};System.out.println("初始数组:");print(a);reverse(a);System.out.println("逆序数组:");print(a);}public static void reverse(int[] a){for(int i=0;i<a.length/2;i++){int start=i;int end=a.length-1-i;if(start==end){break;}int temp=a[start];a[start]=a[end];a[end]=temp;}}public static void print(int[] a){for(int i=0;i<a.length;i++){System.out.print(a[i]+" ");}System.out.println();}}

**三、另一个代码,开辟了偶数长度内存int[] a=new int[20]**

注:还是以上的代码,只修改了内存大小,开辟空间不同,int[] a=new int[20],执行程序会发现数组逆序没有实现,逆序前后的数值是相同的。

原因:开辟的数组的长度为偶数,逆序的时候折半查找,写的是i<a.length,这样的话, 当程序走到折半中间的时候,不能满足条件if(start==end),那么就会继续走剩下的后面的部分,结果就会是逆序又逆序,还是最初的数组。

所以:算法原理是折半查找,交换,那么条件直接写为i<a.length/2即可。

**四、完善代码如下 **

class Reverse{    public static void main(String[] args){        int[] a=new int[11];        fuZhi(a);        System.out.println("初始数组:");        print(a);        reverse(a);        System.out.println("逆序数组:");        print(a);    }    public static void fuZhi(int[] a){        for(int i=0;i<a.length/2;i++){            a[i]=(int)(Math.random()*20);        }    }    public static void reverse(int[] a){        for(int i=0;i<a.length/2;i++){            int start=i;            int end=a.length-1-i;            if(start==end){                break;            }            int temp=a[start];            a[start]=a[end];            a[end]=temp;                    }    }    public static void print(int[] a){        for(int i=0;i<a.length;i++){            System.out.print(a[i]+" ");        }        System.out.println();    }}