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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public void sort(int[] arr) {        //此方法对数组进行操作,没有任何返回值使用void
                int x;
                for(int i=0;i<arr.length;i++) {
                        for(int j=i+1;j<arr.length;j++) {
                                if(arr[i] > arr[j]) {
                                        //x = arr[i];
                                        //arr[i] = arr[j];
                                        //arr[j] = x;
                                        arr[i] = arr[i] ^ arr[j];
                                        arr[i] = arr[i] ^ arr[j];
                                        arr[j] = arr[i] ^ arr[j];
                                }
                        }
                }
        }

评分

参与人数 1技术分 +1 收起 理由
黄晓东 + 1

查看全部评分

4 个回复

倒序浏览
你得到是哈希地址值;
因为打印没有遍历;
for(int i=0;i<arr.length-1;i++)//-1少取最后一次值比较,因为就剩一个了。
arr = arr ^ arr[j];                                 
arr[j] = arr ^ arr[j];//相当于( ( arr^arr[j] ) ^ arr[j] )
arr = arr ^ arr[j];//相当于( arr ^ ( arr^arr[j] ) )
你上下位置也错了 得出的结果里有数组中没有的元素和少原来的元素;
例如:
class  ArrSorting{
        public static void main(String[] args) {
                int [] arr = {1,75,5,35,9,12,13,33,15};
                sort(arr);
                printArray(arr);
        }
        public static void sort(int[] arr){
                for(int i=0;i<arr.length-1;i++){
                        for(int j=i+1;j<arr.length;j++) {
                                if(arr > arr[j]) {
                                        arr = arr ^ arr[j];                                 
                                        arr[j] = arr ^ arr[j];
                                        arr = arr ^ arr[j];
                                        }
                                }
                }
        }
        public static void printArray(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技术分 +1 黑马币 +1 收起 理由
黄晓东 + 1
戒爱 + 1 赞一个!

查看全部评分

回复 使用道具 举报
lgqioi 发表于 2014-2-7 13:27
你得到是哈希地址值;
因为打印没有遍历;
for(int i=0;i

多谢相助,还有位运算也有点问题:)
回复 使用道具 举报
arr[i] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];//arr[i] = (arr[i]^arr[j])^arr[j] =arr[i],根本没有交换
arr[j] = arr[i] ^ arr[j];//arr[j] = ((arr[i]^arr[j])^arr[j])^arr[j] = arr[i]^arr[j],在搞什么?
哥们你这是在干吗?
arr[i] = arr[i]^arr[j];
arr[j] = arr[i]^arr[j];//arr[i] = (arr[i]^arr[j])^arr[j] = arr[i]
arr[i] = arr[i]^arr[j];//arr[i] = (arr[i]^arr[j])^((arr[i]^arr[j])^arr[j]) = arr[j]
希望你能看懂

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

回复 使用道具 举报
哥们,你位运算写错了
  1. arr[i]=arr[i]^arr[j];
  2. arr[j]=arr[i]^arr[j];
  3. arr[i]=arr[i]^arr[j];
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马