Código:
Cita:
Si el número del segundo arreglo es menor que el del segundo arreglo se copia dos veces el menor en vez de que se ordene, no sé si me entienden :/ void Ordenador::mergesort(int* arreglo, unsigned tamano){
int mitad = tamano/2;
int * arreglo1 = new int[mitad];
int * arreglo2 = new int[tamano-mitad];
if (tamano > 1){
for(int i=0; i<mitad; i++){
arreglo1[i] = arreglo[i];
}
for(int i=mitad; i<tamano; i++){
arreglo2[i-mitad] = arreglo[i];
}
mergesort(arreglo1, mitad);
mergesort(arreglo2, (tamano - mitad));
}
merge(arreglo,arreglo1,mitad,arreglo2,(tamano-mitad));
//delete arreglo1, arreglo2;
}
void Ordenador::merge(int* arregloOrdenado, int* arreglo1, int tamano1, int* arreglo2, int tamano2){
//Respectivamente los indices de los arreglos: izquierda (arreglo1), derecha(arreglo2) y ordenado.
int izq = 0, der = 0, ord = 0;
while (izq < tamano1 && der < tamano2){
if(arreglo1[izq] < arreglo2[der]){
arregloOrdenado[ord] = arreglo1[izq];
izq++;
}
else{
arregloOrdenado[ord] = arreglo2[der];
der++;
}
ord++;
}
}
int mitad = tamano/2;
int * arreglo1 = new int[mitad];
int * arreglo2 = new int[tamano-mitad];
if (tamano > 1){
for(int i=0; i<mitad; i++){
arreglo1[i] = arreglo[i];
}
for(int i=mitad; i<tamano; i++){
arreglo2[i-mitad] = arreglo[i];
}
mergesort(arreglo1, mitad);
mergesort(arreglo2, (tamano - mitad));
}
merge(arreglo,arreglo1,mitad,arreglo2,(tamano-mitad));
//delete arreglo1, arreglo2;
}
void Ordenador::merge(int* arregloOrdenado, int* arreglo1, int tamano1, int* arreglo2, int tamano2){
//Respectivamente los indices de los arreglos: izquierda (arreglo1), derecha(arreglo2) y ordenado.
int izq = 0, der = 0, ord = 0;
while (izq < tamano1 && der < tamano2){
if(arreglo1[izq] < arreglo2[der]){
arregloOrdenado[ord] = arreglo1[izq];
izq++;
}
else{
arregloOrdenado[ord] = arreglo2[der];
der++;
}
ord++;
}
}