关于Java 快速排序里面的 数值异或交换

MondChan 发布于 2012/07/30 22:19
阅读 667
收藏 0

今天我试了写一个快速排序的简单demo 但是后来发现在数值交换部分

如果用异或交换 会出错

普通的交换方法不会

如下列代码

如果改成异或 输出结果为11011

如果是普通 依然为111111

后来发现在异或运算过程中 num[i]=num[i]^num[j]

num[j]由1变为0 这令我很纳闷 但是按道理它应该是不变 应该为1 求高手解答

代码如下:

public static void quickSortMC(int[] num,int left,int right){
	int middle;
	int i,j;
	i=left;
	j=right;
	middle=num[(i+j)/2];
	do{
		while(num[i]<middle&&i<right)
			i++;
		while(num[j]>middle&&j>left)
			j--;
		if(i<=j){
			int temp=num[i];
			num[i]=num[j];
			num[j]=temp;
//			num[i]=num[i]^num[j];
//			num[j]=num[i]^num[j];
//			num[i]=num[i]^num[j];
			i++;
			j--;
		}
		
	}while(i<=j);
	if(i<right){
		quickSortMC(num, i, right);
	}if(j>left){
		quickSortMC(num, left, j);
	}
}

 

加载中
1
loki_lan
loki_lan
异或前判断值是否相等,参考这里http://hi.baidu.com/li32768/item/0cf9562733f75b889c63d18f
0
MondChan
MondChan

有高手能帮帮忙吗?

0
MondChan
MondChan

引用来自“loki_lan”的答案

异或前判断值是否相等,参考这里http://hi.baidu.com/li32768/item/0cf9562733f75b889c63d18f
好的  谢谢  果然是有陷阱  原来是我忽略了当它们下标相同时候不应该进行异或交换 
0
sxgkwei
sxgkwei
在高级语言里,用异或交换其实更慢——比声明一个中间变量。
返回顶部
顶部