Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择排序中的交换_Java_Sorting_Selection_Swap_Xor - Fatal编程技术网

Java 选择排序中的交换

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));

接下来是选择排序的代码,当我尝试用较大的元素替换最小的元素时,使用XOR运算符无法工作。它显示0代替值。但是swap处理的是两个常量整数。为什么

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