昨天写排序算法的时候遇到一个问题:将交换两个数的几句代码定义成一个静态方法,需要交换数字的时候调用这个方法,结果排序出来的结果是不对的。
代码如下:
public class Sort {
public static void main(String[] args) {
int[] arr = {10,9,8,7,6,5,4,3,2,1};
maoPao(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "-");
}
}
public static void maoPao(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j+1]);
}
}
}
}
public static void swap(int a, int b){
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
}
输出结果如下:
可以看到数组的顺序并没有改变
我们再将交换的代码写到里面去
public static void maoPao(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
a[j] = a[j] ^ a[j + 1];
a[j + 1] = a[j] ^ a[j + 1];
a[j] = a[j] ^ a[j + 1];
}
}
}
}
输出结果:
这样是可以的
具体是什么原因我还不清楚,有待进一步研究,猜测是跟数组有关。有了解的朋友欢迎讨论。