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
Pero no funciona.
public void reorganize2(int[] v, int x, int left, int right){ //left = 0, right = v.length 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