//位置置换功能
public static void swap(int[] arr,int a, int b)
{
int temp = arr[a];//小明把他的东西给了temp
arr[a] = arr[b];//小王就把自己的东西给了小明
arr[b] = temp;//temp把小名的东西给了小王
}
public static void swap(int[]arr, int a, int b)
{
arr[a]=arr[a]^arr[b];
arr[b]=arr[a]^arr[b];
arr[a]=arr[a]^arr[b];
}
在给你一个简单的例子:
int x=3,y=6;
x=x^y;//x=3^6;
y=x^y;//y=(3^6)^6;y=3;
x=x^y;//y=(3^6)^3;x=6;
异或符号的特点:一个数异或另一个数两次,结果还是这个数。
n = n ^ m; //先用n记录住n^m的值
m = n ^ m; //(n^m)^m;由于一个数异或同一个数两次,结果还是本身的特点,这里n异或了m两次,所以为n还是本身n再次赋值给m
n = n ^ m; //n ^ (n ^ m);然后n在异或m而这个时候m变成了(n^m),由于那个特点,所以m就成了本身再次赋值给n
完成换位。
1、异或是一个数学运算符。他应用于逻辑运算。 其运算法则为a异或b=a'b或ab'(a'为非a)。
2、例如:真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。
异或运算法则:
1. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;
2. d = a ^ b ^ c 可以推出 a = d ^ b ^ c.
3、在计算机应用中,普遍运用,异或的逻辑符号 ^ (Shift + 6).形象表示为:
真^假=真
假^真=真
假^假=假
真^真=假
或者为:
True ^ False = True
False ^ True = True
False ^ False = False
True ^ True = False
/*********************/
利用临时变量。t为临时变量(最常用)
t = a ;a = b; b = t;
/*********************/
利用异或运算的方式。
a = a^b;
b = a ^b;
a = a ^b;
/*************/
不通过变量,直接运算(加法)
a= a +b;
a = a - b;
b = a - b;
/************/
不通过变量,直接运算(减法)
a = a - b;
b = a + b;
a = b - a ;
以上一共四种方法可以实现两个数的置换方式。
当然其实在工作中,第一种方式是运用最多的。也是最常用的。
虽然耗一点点的内存,但其实这根本不算什么。
而第二种方式则运算效率较慢。
后面两种个人认为有点复杂。