Estoy tratando de poner en práctica un método, que, dada una matriz genérica, y dos valores de índice, cortar la matriz, y encontrar el elemento más grande entre los dos números dados.
<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;
}
Pero durante las matrices de enteros [8, 4, 6, 20, 1], está intercambiando correctamente sólo los primeros dos elementos, y me da los elementos máximos equivocadas. ¿Qué hay de malo en el código?
Hay dos problemas con su tipo. La primera es que usted está utilizando firstIndx
y secondIndx
, pero en función de cómo está estructurado el código, que está tratando de que el segundo número como si fuera el segundo índice menos 1 .
La segunda cuestión es que el bucle interior está empezando a volver firstIndx
cada vez que rompe el ordenamiento de burbuja. Se tiene que empezar a i
.
Prueba esta modificación a su bucles:
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
}
}
Editar: Me olvidó mencionar que su enfoque no se encuentra el máximo si el máximo ya está en su posición ordenada. Usted sólo debe agarrar el máximo de array[secondIndx]
después de que haya terminado la clasificación.
Dicho sea de paso, firstIndx
es un nombre de variable bastante malo. Es sólo una letra más que escribirlo en su totalidad: firstIndex
.