Abdirahman橋:
私は、昇順で配列をソートしようとしていると私はこの問題に出くわしました。コードは、配列をソートしますが、それは最後の数字を取り、配列の最初の位置にそれを配置します。2,3,4,1を注文するときに、たとえば、出力は私が数4を取ると、数3の後ろにそれを移動するにはどうすればよい4、1、2、3ですか?
public class Main {
public static void main(String[] args) {
int[] numbers = {2, 3, 1, 4};
int holder = 0;
for(int i = 0; i < numbers.length; i++){
for(int j = 1; j < numbers.length; j++){
if(numbers[i] < numbers[j]){
holder = numbers[i];
numbers[i] = numbers[j];
numbers[j] = holder;
}
}
}
// prints array
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]);
}
}
}
出力:
4
1
2
3
ジョンKugelman:
2つの大きな問題があります。
一つは、あなたが二回いくつかの要素を交換していることです。あなたは、常にことを確認するにi
未満であるj
ことがようnumbers[i]
の左側にありますnumbers[j]
。あなたのループは後の反復では、仕事のやり方は、j
より低いからスタートi
。たとえば、ときi
2つの内部ループで始まるされj
、いつでも開始することができ、これを修正するには1でj
1つのより高い場所でi
:
for(int j = i + 1; j < numbers.length; j++) {
あなたは第二の問題に気づくだろうことを修正した場合:配列は逆にソートされました!だ<
比較は後方です。左の1があるときは、スワップアイテムにしたい大きなそれは小さいだとき、右の1以上ではありません。それは小さくなら、彼らは正しい順序ですでにます。
if(numbers[i] > numbers[j])