数组逆序

**一、算法思想**

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

如图所示:

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

注:随便的定义一个长度为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();
    }
}






































  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值