Я стараюсь делать метод Bubblesort, который делал бы восходящие и нисходящие распоряжения под требованием, удваивая кроме того, в течение осуществления, самое меньшее возможное количество кода.
До настоящего времени мое временное решение:
public void burbuja(){
String TipoOrdenamiento= "Max";
int i,j,aux;
for(i=1;i<A.length;i++){
for(j=A.length-1; j>=i; j--){
if(TipoOrdenamiento=="Min"){
if(A[j-1] >A [j]){
aux= A[j-1];
A[j-1]= A[j];
A[j]= aux;
}
}
if(TipoOrdenamiento=="Max"){
if(A[j-1] <A [j]){
aux= A[j-1];
A[j-1]= A[j];
A[j]= aux;
}
}
}
}
}
Поскольку они увидят различие между восходящим распоряжением, и нисходящий один очень маленький. Мой вопрос, - если этот метод уже был уменьшен до Вашей простейшей формы, или Вы считаете, что у этого кода все еще есть край, чтобы продолжать быть compactado. Того, чтобы быть таким: какого способа могло бы находиться лучшее решение? (лучшее решение в условиях минимального количества "клонировавшего" кода).
Есть несколько точек из-за того, что улучшается (первые 2, уже упомянутые из-за @Dev. Джоэл):
equals
, не с ==
.Я буду поставлять осуществление, основанное на твоем коде и предложенный прогресс, включая благодеяние, Java использует 8:
static final String TIPO_ORDEN_MIN = "min";
//punto 2
public void burbuja(int[] A, String tipoOrdenamiento) {
//punto 4
if (A == null) return; //no hacer nada porque el arreglo es nulo
//punto 5
tipoOrdenamiento = tipoOrdenamiento == null ? "" : tipoOrdenamiento.trim().toLowerCase(); //
//punto 5
//por defecto, que ordene de menor a mayor
BiPredicate<Integer, Integer> comparadorOrden = (x, y) -> x > y;
//puntos 1 y 3
//extra: usualmente los valores que sabemos que no van a variar
//deben declararse como constantes como es el caso de
//la variable TIPO_ORDEN_MIN
//y siempre se deben comparar las constantes contra las variables
//no al revés
if (TIPO_ORDEN_MIN.equals(tipoOrdenamiento)) {
comparadorOrden = (x, y) -> x < y;
}
//variable para limitar la cantidad de iteraciones (punto 7)
boolean cambio = true;
for (i = 1; cambio && i < A.length; i++) {
//por defecto, asumimos que no habrán cambios en esta iteración
cambio = false;
for (j = A.length-1; j >= i; j--) {
if (comparadorOrden.test(A[j-1, j], A[j])) {
int aux = A[j-1];
A[j-1] = A[j];
A[j] = aux;
//si hubo un cambio, actualizar la variable
cambio = true;
}
}
}
}
Какие-то вопросы, чтобы изменять в Вашей программе
Сравнивать Strings с equals();
не с ==
if(TipoOrdenamiento.toLowerCase().equals("min")){...}
if(TipoOrdenamiento.toLowerCase().equals("max")){...}
Тип Распоряжения может проходить по параметру в метод
public void burbuja(String TipoOrdenamiento){...}