2016-12-24 12 views
-1

だから私は、私の選択ソートのためにこのコードを持っている:選択ソートアルゴリズムの問​​題

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
      if(smallest != i){ 
       int temp = arrayToSort[i]; 
       arrayToSort[i] = arrayToSort[smallest]; 
       arrayToSort[smallest] = temp; 
      } 
     } 
    } 
} 

私は、ランダムな数字とint型の配列を生成しています。私の選択ソートは時々配列をソートしますが、時には配列を「ほとんど」ソートしません。配列は、間違った場所にある非常に少ない数を除いて、ほとんどソートされます。私は何がここで間違っているのか分かりません。配列が完全にソートされませんでした

いくつかのテスト結果:

***NON SORTED*** 
77 
53 
27 
58 
83 
***SORTED*** 
27 
53 
77 
58 
83 

***NON SORTED*** 
40 
87 
27 
48 
82 
***SORTED*** 
27 
40 
82 
48 
87 

答えて

3

あなたは内側のループ内のコードの一部を持っているが、ループの外にそれを置きます。

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
     } 
     if(smallest != i){ 
      int temp = arrayToSort[i]; 
      arrayToSort[i] = arrayToSort[smallest]; 
      arrayToSort[smallest] = temp; 
     } 
    } 
} 

例えばalgorithm in Wikipediaを参照してください。

+0

オハイオ州、私はそれがどのようにそれをねじ込むかを見ます。ありがとうございました! – Carlton

2

私が必要なときにこれをしました大学のプロジェクト

参照:第2 foorループ内ここselection algoritm with figure

selection sort

public static void selectionSort(int[] arr){ 
     for (int i = 0; i < arr.length - 1; i++) 
     { 
      int index = i; 
      for (int j = i + 1; j < arr.length; j++){ 
       if (arr[j] < arr[index]){ 
        index = j;//searching for lowest index 
       } 
      } 
      int smallerNumber = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = smallerNumber; 
     } 
    } 
+0

初心者の方に投票していただきありがとうございます。評判を得るのは難しいです。私は新しいスタックオーバーフローです。ありがとうございました! –

0

、あなたは私(または最小)未満の任意の要素を見つけた場合、あなたはここでは必要ありませんスワップ操作を行っています。選択ソートでは、ソートされていない配列から最小の要素を取得し、一番左の要素と入れ替える必要があり、その要素はソートされた配列の一部になります。 最小の要素に対してのみスワップ操作を行うように、2番目の内側ループの外側にスワップしてください。

for(int i = 0; i < arrayToSort.length; i++){ 
    smallest = i; 
    for(int j = i+1; j < arrayToSort.length; j++){ 
     if(arrayToSort[j] < arrayToSort[smallest]){ 
      smallest = j; 
     } 
    } 
    if(smallest != i){ 
     int temp = arrayToSort[i]; 
     arrayToSort[i] = arrayToSort[smallest]; 
     arrayToSort[smallest] = temp; 
    } 
}