
Solución de problemas con MergeSort
Publicado por Alejandro (14 intervenciones) el 18/08/2016 01:27:28
Hola buen día tengan, tengo una duda con respecto a este código, he estado todo el dia y solo no me ejecuta, agradecería si me mostraran mi error y una posible solución, muchas gracias
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import java.util.Random;
public class Merge{
public static int n ;
public static int cont = 0;
public static void main(String[] args){
System.out.println("Cantidad de numeros a ordenar: ");
String linea = System.console().readLine();
n = Integer.parseInt(linea);
int maximo = 1000;
int[] A = new int[n];
int[] Ordenado = new int[n];
for(int i=0;i<A.length;i++){
A[i] = (int)Math.floor(Math.random()*maximo);
}
// for(int i=0;i<n;i++){
// System.out.print(" "+A[i]);
// }
//Mandamos llamar al metodo mergeSort que devuelve un arreglo ordenado
Ordenado = mergeSort(A);
System.out.println("");
/*
//Imprimimos el arreglo ordenado
for(int i=0;i<n;i++){
System.out.print(" "+Ordenado[i]);
}
*/
//Imprimimos el contador
System.out.println("\nSe ordenaron "+n+" numeros usando "+cont+" instrucciones");
}
public static int[] mergeSort(int[] arreglo){
//Declaramos arreglos para almacenar la mitad izquierda y la mitad derecha del arreglo actual
//que se este procesando
int[] mitadIzquierda = new int[arreglo.length/2];
int[] mitadDerecha = new int[arreglo.length - mitadIzquierda.length];
//con estos dos ciclos dividimos el arreglo en las dos mitades
for(int i=0;i<mitadIzquierda.length;i++){
mitadIzquierda[i]=arreglo[i];
}
for(int j=0;j<mitadDerecha.length;j++){
mitadDerecha[j]=arreglo[mitadIzquierda.length+j];
}
//Aqui empieza la recursividad
//Mandamos llamar a mergeSort para cada una de las mitades y entonces el algoritmo
//hará lo mismo para cada mitad
if(arreglo.length > 1){
cont ++;
cont += 2;
//El método merge devuelve un arreglo ordenado
arreglo = merge(mergeSort(mitadIzquierda), mergeSort(mitadDerecha));
cont++;
System.out.println(arreglo);
}
cont ++;
return arreglo;
}
public static int[] merge(int[] arreglo2, int[] arreglo3){
int i1=0, i2=0,i3=0;
int[] arreglo1 = new int[n];
while(i2 <= arreglo2[i2] && i3 <= arreglo3[i3]){
if (arreglo2[i2]< arreglo3[i3]){
arreglo1[i1++] = arreglo2[i2++];
}else{
arreglo1[i1++] = arreglo3[i3++];
}
}
return arreglo1;
}
}
Valora esta pregunta


0