2017-06-11 5 views
0

誰かがこのメソッドのスワップ部分がなぜ機能するのか説明してください。私はこのメソッドをしばらく使用していますが、スワップ部分の働きを頭で覆すことはできません。もし誰かがそれを説明できるなら、私はそれを感謝します。ありがとう選択ソートでのスワップの仕組みは?

 public static int [] selectionSort(int [] num){ 
     int min=0,minIndex=0; 
     for(int i=0; i< num.length-1;i++){ 
      min=num[i]; 
     for(int x=i+1;x<num.length;x++){ 
      if(min > num[x]){ 
       min=num[x]; 
       minIndex=x; 
      } 
     } 
     //this is the part Im so confused about 
     if(num[i]> min){ 
      int temp=num[i]; 
      num[i]=num[minIndex]; 
      num[minIndex]=temp; 
     } 
    } 
    return num; 
    } 
+0

紛らわしいものは何ですか?それはインデックス 'i'の要素をインデックス' minIndex'の要素と交換しています。 – Bohemian

+0

2つの変数の値を入れ替えるコードを書こうとすると分かります。 –

答えて

1

選択ソートの概念全体は、次に小さい要素のインデックスを選択し、その正しい位置に移動することです。

選択ソートが繰り返されるたびに、ソートされていない部分配列からの最小要素(昇順を考慮)が選択され、ソートされた部分配列に移動されます。

次の例では、上記の手順を説明します。各ステップ

int arr[] = {64, 25, 12, 22, 11} 

Find the minimum element in arr[0...4] 
    and place it at beginning 

      *11* 25 12 22 64 

Find the minimum element in arr[1...4] 
    and place it at beginning of arr[1...4] 

      11 *12* 25 22 64 

Find the minimum element in arr[2...4] 
    and place it at beginning of arr[2...4] 

      11 12 *22* 25 64 

Find the minimum element in arr[3...4] 
    and place it at beginning of arr[3...4] 

      11 12 22 *25* 64 (64 is automatically sorted) 

は、あなたがminIndexを見つけます。 arr[minIndex]の値とarr[i]の値を入れ替えます。

だから、反復011がインデックス4であるため、minIndex4になります、そしてそれはように最初の反復である....それ以来iは、当然のことながら、0です。

イタレーション0では、 num[i] => 64およびnum[maxIndex] => 11です。反復0、 num[i] => 11、及びnum[maxIndex] => 64

int temp = num[i]; // temp => 64 
num[i] = num[minIndex]; // num[i] = num[minIndex] => 11 
num[minIndex] = temp; // num[minIndex] => 64 

+0

あなたのステップバイステップの説明は私にとって欠けていたリンクでした、あなたの助けに感謝します – Msinger

+0

@Msinger Glad私は助けてくれました。乾杯! –

0

Javaの変数はポインタではなく、その値(呼び出しの代わりに呼び出しの参照)に苦しんでいるので、最小の値を格納する一時変数を割り当てる必要があります。num [i]を別の番号に変更する場合は、あとで番号にアクセスできる必要があります。

int temp=num[i]; //create temp variable to store the number in array num on index i 
num[i]=num[minIndex]; // assign a new number to num on index i 
num[minIndex]=temp; // now assign the temp number to num on index minIndex