黑马程序员技术交流社区

标题: 为什么在使用位运算给数组排序时得到混乱结果 [打印本页]

作者: 戒爱    时间: 2014-2-7 12:42
标题: 为什么在使用位运算给数组排序时得到混乱结果
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];
                                }
                        }
                }
        }
作者: lgqioi    时间: 2014-2-7 13:27
你得到是哈希地址值;
因为打印没有遍历;
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]+"]");
                }       
        }
}
作者: 戒爱    时间: 2014-2-7 14:53
lgqioi 发表于 2014-2-7 13:27
你得到是哈希地址值;
因为打印没有遍历;
for(int i=0;i

多谢相助,还有位运算也有点问题:)

作者: 徐芾清    时间: 2014-2-19 20:36
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]
希望你能看懂
作者: 谜燕    时间: 2014-3-14 17:12
哥们,你位运算写错了
  1. arr[i]=arr[i]^arr[j];
  2. arr[j]=arr[i]^arr[j];
  3. arr[i]=arr[i]^arr[j];
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2