交换数值我们一般用异或。在选择排序中,我们一般假设第一个数为最小值,然后与后面的真正最小值交换。但是如果后面没有找到比第一个数还要小的,而你任然执行交换的话,如果用temp变量是可行的。但是用异或的话,自己异或自己变为0了。然后这个数值就成为0了。引起数据错误。
//选择排序
public static void selectSort(int arr[],int n){
for(int out=0;out<n-1;out++){
int min=out;
for(int in=out+1;in<n;in++){
if(arr[in]<arr[min]) {
min=in;
}
}
//出现错误,如果min就是out的话,就会自己异或自己,然后等于0了,应该判断
if(min!=out){
arr[min]=arr[min]^arr[out];
arr[out]=arr[min]^arr[out];
arr[min]=arr[min]^arr[out];
}
}
}