Hola a todos, vengo solicitandoles ayuda ya que he estado teniendo problemas con la elaboración de dicho algoritmo de ordenamiento, no ordena los enteros que se le envían y al ir imprimiendo cada uno de los "mini arreglos" que se van creando y ordenando de forma recursiva aparecen numeros que nisiquiera estan en el arreglo. Acá esta el código, ojalá me puedan ayudar.
void Ordenador::mergesort(int * arreglo, unsigned tamano){
if(tamano > 1){
int tamano1 = tamano / 2;
int tamano2 = tamano - tamano1;
int* subArreglo1 = new int [tamano1];
int* subArreglo2 = new int [tamano2];
for(int i = 0; i < tamano1; i++){
subArreglo1[i] = arreglo[i];
}
for(int i = tamano1; i < tamano; i++){
subArreglo1[i-tamano1] = arreglo[i];
}
mergesort(subArreglo1, tamano1);
mergesort(subArreglo2, tamano2);
arreglo = merge(subArreglo1, tamano1, subArreglo2, tamano2);
}
}
int* Ordenador::merge(int * subArreglo1, int tamano1, int * subArreglo2, int tamano2){
int tamano = tamano1 + tamano2;
int* nuevoArreglo = new int [tamano];
int indice1 = 0;
int indice2 = 0;
for(int i = 0; i < tamano; i++){
if(subArreglo1[indice1] <= subArreglo2[indice2] && indice1 < tamano1){
nuevoArreglo[i] = subArreglo1[indice1];
indice1++;
} else{
if(indice2 < tamano2){
nuevoArreglo[i] = subArreglo2[indice2];
indice2++;
}
}
}
return nuevoArreglo;
}