Tengo un código que me reordena un vector de una determinada manera, en la mitad izquierda, estarán los numeros menores o iguales que x, y por la derecha, los que son mayores que x.
Por ejemplo: v = {1, 10, 23, 15, 13, 8}; x = 8;
Reordenado (una posibilidad) seria v = {3, 1, 8, 10, 23, 15};
Sé hacerlo si digo que la funcion retorne un array, pero no sé hacerlo sin que retorne nada.
Código
public int[] reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length
if(left==right)
return reorganize2(v,x,left,right-1);
else{
int m = (left+right)/2;
if(v[m] <= x){
swap(v,m,left);
return reorganize2(v,x,left+1,right);
}else{
swap(v,m,right-1);
return reorganize2(v,x,left,right-1);
}
}
}
public void swap(int[] v, int i, int j){
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
He probado a hacer ésto:
Código
public void reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.lengthPero no funciona.
if(left==right)
reorganize2(v,x,left,right-1);
else{
int m = (left+right)/2;
if(v[m] <= x){
swap(v,m,left);
reorganize2(v,x,left+1,right);
}else{
swap(v,m,right-1);
reorganize2(v,x,left,right-1);
}
}
}
public void swap(int[] v, int i, int j){
int tmp = v[i];
v[i] = v[j];
v[j] = tmp;
}
No he hecho muchos ejercicios de recursividad con funciones void (he hecho solo uno, pero apenas lo entiendo), asi que agradecería que me alguien me lo explicase mas o menos











Autor


En línea
