【问题标题】:Swapping in selection sort在选择排序中交换
【发布时间】:2019-03-07 18:22:02
【问题描述】:

按照选择排序的代码,当我尝试用更大的元素交换最小元素时,使用 XOR 运算符不起作用。它显示 0 代替值。但是交换正在处理两个常量整数。为什么?

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]+" ");
        }
    }
}

输出是:

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 

【问题讨论】:

  • 使用临时值要简单得多。

标签: java sorting selection swap xor


【解决方案1】:

如果元素相等,则使用 XOR 交换元素将不起作用,这在大多数书籍中都有明确指出。这里发生的情况如下 - 如果第 i 个元素是第 i 次迭代中的最小值,您将尝试将其与自身交换,这会导致其值变为 0。

为了避免这个问题,在使用 XOR 交换数字之前,请检查它们的值是否相等。在您的情况下,如果您确定数组不包含相等的元素,那么如果 min==i 则不要交换。

【讨论】:

  • 谢谢我把它改成了 if(min!=i){ then swap } 现在它工作正常了。
  • @coder005: 更好的是,不要使用 XOR 交换 - 这是一个令人讨厌的 hack,而且不是特别有效,尽管你可能会这么想。改为使用临时变量进行交换。
猜你喜欢
  • 2013-04-30
  • 2018-11-07
  • 1970-01-01
  • 2013-04-25
  • 2021-08-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 2021-12-09
相关资源
最近更新 更多