A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ㄨ____陌生 中级黑马   /  2013-4-2 22:24  /  1877 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ㄨ____陌生 于 2013-4-3 13:32 编辑

import java.util.Arrays;

public class SwapDemo{

    public static void main(String[] args){
       int [] a = new int[]{
                     (int)(Math.random() * 1000),
                     (int)(Math.random() * 1000),
                     (int)(Math.random() * 1000),
                     (int)(Math.random() * 1000),                     
                     (int)(Math.random() * 1000)                                                            
       };  

       System.out.println(a);
       System.out.println(Arrays.toString(a));
       swap(a);
       System.out.println(Arrays.toString(a));      
    }

    public static void swap(int a[]){
       int len = a.length;
       for(int i=0;i<len/2;i++){
           int tmp = a;
           a = a[len-1-i];
           a[len-1-i] = tmp;
       }
    }
}

//for(int i=0,int j=a.length-1;i<j;i++,j--) 是否等效于 for(int i=0;i<a.length/2;i++)呢?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
for((int i=0,int j=a.length-1;i<j;i++,j--) )和for(int i=0;i<a.length/2;i++) 这俩个都可以实现数组元素颠倒
在效率上面也是一样的,因为他们的交换次数是一样的,第一个交换次数是一半,第二个因为有i<j,他们俩个同时从最小和最大点同时向中间走,所以次数是一样的,这就和中学数学上面的俩车相遇的问题是一样的

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
一样的,功能和效率是一样的。原理一模一样,只是换了个写法,另外把len-1-i换成了j--,下表的计算次数及数组元素的交换次数都是一样的,因此效率相同。
但是,你在for()里的条件定义格式是错误的,只能用一个int来声明变量并初始化。第二种条件句整理后如下:
    public static void swap(int a[]){
       for(int i=0,j=a.length-1;i<j;i++,j--) {
           int tmp = a[i];
           a[i] = a[j];
           a[j] = tmp;
       }
    }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马