Aqui os dejo un gif sacado de wikipedia de lo que hace el algoritmo y mi codigo:
http://es.wikipedia.org/wiki/Ordenamiento_por_mezcla
Funcion main
Código
#include "divideyvenceras.hpp" main (){ vector <int> vectorDesordenado; CrearVector(vectorDesordenado); OrdenarPorFusion(vectorDesordenado, true); MostrarVector(vectorDesordenado); }
Resto del programa
Código
#include <iostream> #include <cstdlib> #include <vector> using namespace std; #define INFINITO 2147483647 void MostrarVector (vector <int> vecT){ for (int i=0;i<vecT.size();i++) cout << "[ " << vecT[i] << " ]"; cout << endl; } void Fusionar (vector <int> &vecT, vector<int> vecU, vector <int> vecV){ int i=0,j=0,m, n; m=vecU.size(); n=vecV.size(); vecU.push_back(INFINITO); vecV.push_back(INFINITO); for (int k=0; k<m+n; k++){ if (vecU[i]<vecV[j]){ vecT[k]=vecU[i]; i++; } else{ vecT[k]=vecV[j]; j++; } } } void OrdenarPorFusion (vector <int> &vecT, bool verbose){ int n=vecT.size(); if (verbose) MostrarVector (vecT); if (n>1){ //Si el tamaño es lo suficientemente pequeño (?) vector <int> vecU; vector <int> vecV; //Dividir vector en 2 for (int i=0; i<n; i++){ if (i<n/2) vecU.push_back(vecT[i]); else vecV.push_back(vecT[i]); } //Recursivo OrdenarPorFusion(vecU, verbose); OrdenarPorFusion(vecV, verbose); Fusionar(vecT,vecU,vecV); } } void CrearVector (vector <int> &vecT){ int n; cout << "Tamaño del vector: "; cin >> n; srand (time(NULL)); //Semilla a 0 for (int i=0;i<n;i++) vecT.push_back(rand()%10); //Numero pseudoaleatorio entre 0 y 10 }
Me pueden dar alguna pista de como hacer la version iterativa?
Muchas gracias!