martes, 31 de enero de 2012

MergeSort

Algoritmo de búsqueda de un elemento en un Vector mediante Merge-Sort. El método es Divide y Vence, y está realizado en C.

#include <cstdlib>
#include <iostream>
#define max 100
using namespace std;
void mezclar(int arreglo1[], int n1, int arreglo2[], int n2, int arreglo3[])
{
    int x1=0, x2=0, x3=0;

    while (x1<n1 && x2<n2) {
        if (arreglo1[x1]<arreglo2[x2]) {
            arreglo3[x3] = arreglo1[x1];
            x1++;
        } else {
            arreglo3[x3] = arreglo2[x2];
            x2++;
        }
        x3++;
    }
    while (x1<n1) {
        arreglo3[x3] = arreglo1[x1];
        x1++;
        x3++;
    }
    while (x2<n2) {
        arreglo3[x3] = arreglo2[x2];
        x2++;
        x3++;
    }
}

void mezcla(int vector[], int n)
{
    int *vector1, *vector2, n1, n2,x,y;
    if (n>1)
    {
        if (n%2 == 0)
            n1=n2=(int) n / 2;
        else
        {
            n1=(int) n / 2;n2=n1+1;
        }
        vector1=(int *) malloc(sizeof(int)*n1);
        vector2=(int *) malloc(sizeof(int)*n2);
        for(x=0;x<n1;x++)
            vector1[x]=vector[x];
        for(y=0;y<n2;x++,y++)
            vector2[y]=vector[x];
        mezcla(vector1, n1);
        mezcla(vector2,n2);
        mezclar(vector1, n1, vector2, n2, vector);
        free(vector1);
        free(vector2);
    }     
}
void printlist(int vector[],int n)
{
   int i;
   for(i=0;i<n;i++){
      cout<< vector[i]<<"\t";
      }
      cout<<endl<<endl;
}

int main(){
    int i, vector[max];
    int n;
   
    cout<<"Introduce el número de elementos del vector :"<<endl;
    cin>>n;
  
    for(i=0;i<n;i++)
    {
       cout<<" vector["<<i+1<<"]=";
       cin>>vector[i];
    }
  
    cout<<"El vector introducido es:"<<endl;
    printlist(vector,n);
  
    mezcla(vector,n);

    cout<<"El vector ordenado mediante el método de mezclar es:"<<endl;
    printlist(vector,n); //imprimir la lista
   
    system("pause");
    return 0;
}

No hay comentarios:

Publicar un comentario