2012-12-17 43 views
0

接下來是選擇排序的代碼,當我嘗試用較大的元素交換最小元素時,它不能使用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 
+1

使用臨時值要簡單得多。 –

回答

3

與XOR交換元素將無法正常工作。這裏發生的是以下 - 如果第i個元素是第i次迭代中的最小值,則將嘗試將其與自身進行交換,使其值變爲0.

爲了避免此問題,用XOR檢查數字是否相等。在你的情況下,如果你確定該陣列不包含相等的元素,只要不要交換,如果min==i

+0

謝謝我將它改爲if(min!= i){then swap} now now working fine。 – coder005

+0

@ coder005:更好的是,不要使用異或交換 - 這是一個討厭的黑客,它不是特別有效,儘管你可能會想。改爲使用臨時變量進行交換。 –