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