配列はソート間違った位置に一つの要素を残し

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たとえば、ときi2つの内部ループで始まるされj、いつでも開始することができ、これを修正するには1でj1つのより高い場所でi

for(int j = i + 1; j < numbers.length; j++) {

あなたは第二の問題に気づくだろうことを修正した場合:配列は逆にソートされました!<比較は後方です。左の1があるときは、スワップアイテムにしたい大きなそれは小さいだとき、右の1以上ではありません。それは小さくなら、彼らは正しい順序ですでにます。

if(numbers[i] > numbers[j])

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=179288&siteId=1