2017-11-02 2 views
0

配列の数値を並べ替える簡単なアルゴリズムがあり、すべての要素が最後の要素を除いて順序付けられます。私はこれを修正するために私のループの境界を変更しようとしましたが、代わりに無限ループを作成します。並べ替えアルゴリズムが配列の最後の要素をスキップしています

+0

あなたgetUsed()メソッドです。そこだけ 'array.length'ていることを、必ずではなく' Array.lengthと-1 ' –

+0

getUsedSize()はちょうどそれが選択ソートですか?サイズを使用している何usedSize –

+0

返し、あなたは全体のリストをチェックしなければなりません。これを試してみてください: 'for(int i = pointer + 1; i

答えて

0
while (pointer < arrayLength){ 
    int min = findMinFrom(pointer); 
    for (int i = pointer; i < arrayLength; i ++){ 
     if (A[i] == min){ 
      swap(i, pointer); 
      pointer ++; 
     } 
     compNewS ++; 
    } 

} 

問題が表示されますか?ポインタが更新されるのはA[i] == minで、そうでなければループします。あなたのpointer++をその状態から外してください。

これは二つのループで行わが、ここではコードの調整されたバージョンであることができる。

public class Numbers { 

private static int [] A ; 

public static void main(String [] args) { 
    int [] array = {3,2,1,4,5,6,7,8,9,7}; 
    A = array; 
    newSort(array, array.length); 
    for(int i = 0; i < A.length;i++) 
     System.out.println(A[i]); 
} 

public static void newSort(int[] array, int arrayLength){ 
    int pointer = 0; 
    int p = 0; 
    while(p < array.length) { 
     int min = findMinFrom(p,array); 
     int temp = array[p]; 
     array[p] = min; 
     array[min] = temp; 
     p++; 
    } 
} 



public static int findMinFrom(int p, int[] array){ 
    int min = p; 
    for (int i = p; i < array.length; i ++){ 
     if (A[i] < array[p]){ 
      min =i; 
     } 
    } 
    return min; 
} 

}

+0

ポインタはifループの内側にあるはずです。外側に移動するとエラーが発生しません –

+0

'pointer ++'命令を動かすとプログラムは終了しますが、それも正しくありません。 –

+0

これはエラーを修正し、実装が完全に間違っています。アレイ上で同じエレクタンスがいくつあるか教えていただけますか? 5がminに等しい場合、10要素の配列で、ポインタはarray.lengthに決して到達せず、ループは決して破られません。 –

関連する問題