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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惠晖 中级黑马   /  2012-12-4 23:24  /  1368 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void selectSort(int[]arr)
        {
                for (int x=0;x<arr.length-1 ;x++ )
                {
                        for (int y=x+1;y<arr.length ;y++ )
                        {
                                if (arr[x]>arr[y])
                                {
                                        swap(arr,x,y);//如果这里写成swap(arr,arr[x],arr[y])是换位的什么东西呢
                                }
                        }
                }
        }
        public static void swap(int []arr ,int x,int y)
        {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;                        

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
当然是把arr[x]H和arr[y]的值作为索引来交换
相当于           int temp=arr[arr[x]];
                         arr[arr[x]]=arr[arr[y]];
                         arr[arr[y]]=temp;     
回复 使用道具 举报
罗会涛 发表于 2012-12-4 23:58
当然是把arr[x]H和arr[y]的值作为索引来交换
相当于           int temp=arr[arr[x]];
                    ...

class ArrayTest
{
        public static void main(String[] args)
        {
                int[]arr={2,4,3,5,7,6,9,0};
                print(arr);
                selectSort(arr);
                print(arr);
        }
        public static void selectSort(int[]arr)
        {
                for (int x=0;x<arr.length-1 ;x++ )
                {
                        for (int y=x+1;y<arr.length ;y++ )
                        {
                                if (arr[x]>arr[y])
                                {
                                                int temp=arr[arr[x]];
                         arr[arr[x]]=arr[arr[y]];
                         arr[arr[y]]=temp;  
                                }
                        }
                }
        }
        public static void swap(int []arr ,int x,int y)
        {
                        int temp=arr[x];
                        arr[x]=arr[y];
                        arr[y]=temp;                               
        }
        public static void print(int[]arr)
        {
                System.out.print("[");
                for (int x=0;x<arr.length ; x++)
                {
                        if (x!=arr.length-1)
                                System.out.print(arr[x]+",");
                        else
                                System.out.println(arr[x]+"]");

                }
        }
}
为什么2次结果不一样
回复 使用道具 举报
神啊  2个方法 都是同一个意思  结果虚拟机给出2个不同的答案 这是为什么呢
回复 使用道具 举报
惠晖 发表于 2012-12-5 00:04
class ArrayTest
{
        public static void main(String[] args)

结果肯定不一样啊,原本想按索引交换数组中的两个元素,现在把值当索引,再换必须不行啊,值所对应的索引有没有都是个问题
回复 使用道具 举报
罗会涛 发表于 2012-12-5 00:11
结果肯定不一样啊,原本想按索引交换数组中的两个元素,现在把值当索引,再换必须不行啊,值所对应的索引有没 ...

你仔细看下我的代码  我贴的2个代码实际上都是相同的意思  但是结果不一样, 一个是调用了方法,一个是直接把调用的方法 写过来了 没调用,  但是他们2的结果不一样
回复 使用道具 举报
那个交换的部分写错了
回复 使用道具 举报
惠晖 发表于 2012-12-5 00:32
你仔细看下我的代码  我贴的2个代码实际上都是相同的意思  但是结果不一样, 一个是调用了方法,一个是直 ...

2个代码不是相同的意思,明显不同啊,你怎么认为是相同.
只有数组中的元素是存贮对应位置的角标时才一样.如{0,1,2,3,4}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马