黑马程序员技术交流社区
标题:
为什么在使用位运算给数组排序时得到混乱结果
[打印本页]
作者:
戒爱
时间:
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
哥们,你位运算写错了
arr[i]=arr[i]^arr[j];
arr[j]=arr[i]^arr[j];
arr[i]=arr[i]^arr[j];
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2