gpt4 book ai didi

java - 选择排序中的交换

转载 作者:行者123 更新时间:2023-12-02 00:05:46 27 4
gpt4 key购买 nike

下面是选择排序的代码,当我尝试将最小元素与较大元素交换时,使用 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

最佳答案

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

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

关于java - 选择排序中的交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919019/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com