Java 选择排序中的交换
接下来是选择排序的代码,当我尝试用较大的元素替换最小的元素时,使用XOR运算符无法工作。它显示0代替值。但是swap处理的是两个常量整数。为什么Java 选择排序中的交换,java,sorting,selection,swap,xor,Java,Sorting,Selection,Swap,Xor,接下来是选择排序的代码,当我尝试用较大的元素替换最小的元素时,使用XOR运算符无法工作。它显示0代替值。但是swap处理的是两个常量整数。为什么 import java.io.*; class selection { public static void main(String s[])throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
import java.io.*;
class selection {
public static void main(String s[])throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter n");
int n=Integer.parseInt(br.readLine());
System.out.println("Enter array");
int a[]=new int[n];
for(int i=0;i<n;++i) {
a[i]=Integer.parseInt(br.readLine());
}
int min;
System.out.println("Entered Array : ");
for(int i=0;i<n;++i)
System.out.print(a[i]+" ");
for(int i=0;i<n;++i) {
min=i;
for(int j=i+1;j<n;++j) {
if(a[min]>a[j])
min=j;
}
a[min]=a[min]^a[i];
a[i]=a[min]^a[i];
a[min]=a[min]^a[i];
}
System.out.println("\nSorted Array : ");
for(int i=0;i<n;++i) {
System.out.print(a[i]+" ");
}
}
}
如果元素相等,则用XOR交换元素将不起作用,大多数书籍都明确指出了这一点。这里发生的事情如下-如果第i个元素在第i次迭代中是最小的,您将尝试将其与自身交换,从而使其值变为0
为了避免此问题,在使用异或交换数字之前,请检查它们的值是否相等。在您的情况下,如果您确定数组不包含相等的元素,请不要在
min==i
的情况下进行交换,如果元素相等,则使用XOR交换元素将不起作用,大多数书籍都明确指出了这一点。这里发生的事情如下-如果第i个元素在第i次迭代中是最小的,您将尝试将其与自身交换,从而使其值变为0
为了避免此问题,在使用异或交换数字之前,请检查它们的值是否相等。在您的情况下,如果您确定数组不包含相等的元素,请不要交换if
min==i
谢谢,我将它改为if(min!=i){then swap}。现在它可以正常工作了。@coder005:更好的是,不要使用异或交换-这是一个令人讨厌的黑客行为,尽管您可能认为它不是特别有效。使用临时变量进行交换。谢谢,我将它改为if(min!=i){then swap}现在它可以正常工作了。@coder005:更好的办法是,不要使用异或交换-这是一个令人讨厌的黑客行为,尽管你可能会这么想,但不是特别有效。使用临时变量进行交换。使用临时值要简单得多。使用临时值要简单得多。
Enter n
8
Enter array
1
5
4
6
2
8
9
7
Entered Array :
1 5 4 6 2 8 9 7
Sorted Array :
0 2 0 5 0 7 8 0