WebStormer:
私は、一般的な配列を与えられた、という、メソッドを実装しようとしているし、2つのインデックス値は、配列をスライスし、2つの与えられた数の間の最大の要素を見つけます。
<T extends Comparable<? super T>> T max(T[] array, int firstIndx, int secondIndx) { //requires comparable
T maxElement = array[0]; //8
System.out.println(Arrays.toString(array));
for (int i = firstIndx; i < secondIndx - 1; i++) {
for (int j = firstIndx + 1; j < secondIndx; j++) {
if (array[i].compareTo(array[j]) > 0) {
maxElement = array[i];
array[i] = array[j];
array[j] = maxElement;
}
}
}
System.out.println(Arrays.toString(array));
return maxElement;
}
しかしintのアレイ[8、4、6、20、1]のために、私は間違った最大要素を与え、正しくちょうど最初の2つの要素を交換しています。コードが間違っては何ですか?
ヨルダン:
あなたのソートには2つの問題があります。最初は、あなたが使用していることであるfirstIndx
とsecondIndx
、それは第2の指標であるかのようにあなたのコードが構成されている方法に基づいて、それは、第2の数を処理することだマイナス1。
第二の問題は、あなたの内側のループがで戻って開始されていることであるfirstIndx
バブルソートを破るたびに、。それはに開始する必要がありますi
。
ループのためにあなたにこの変更をお試しください:
for (int i = firstIndx; i <= secondIndx - 1; i++) { // Notice the "<=".
for (int j = i + 1; j <= secondIndx; j++) { // j starts at i
// ... existing bubble sort code goes here
}
}
編集:私は、最大でそのソート位置にすでにある場合は、あなたのアプローチは、最大を見つけることができませんことを言及しませんでした。あなただけの最高をつかむ必要がありarray[secondIndx]
ますが、ソート終わった後。
余談として、firstIndx
かなり悪い変数名です。これは、完全にそれを書くためにのみ1文字以上です:firstIndex
。