Buscar

Mergesort

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include<stdlib.h>
#include<stdio.h>
void merge(int v[], int l, int m, int r){
	
	int f, j, k;
	int n = m - l + 1;
	int n2 = r - m;
	int L1[n], R[n2];
	for (f = 0; f < n; f++)
		L1[f] =v[l + f];
	for (j = 0; j < n2; j++)
		R[j] = v[m + 1+ j];
	f = 0;
	j = 0;
	k = l;
	while (f < n && j < n2)
	{
		if (L1[f] <= R[j])
		{
			v[k] = L1[f];
			f++;
		}
		else
		{
			v[k] = R[j];
			j++;
		}
		k++;
	}
	while (f < n)
	{
		v[k] = L1[f];
		f++;
		k++;
	}
	while (j < n2)
	{
		v[k] = R[j];
		j++;
		k++;
	}
}
int min(int x, int y) { 
return (x<y)? x :y; 
}
void mergeSort(int v[], int n){
int i; 				
int j; 
for (i=1; i<=n-1; i = 2*i)
{
	for (j=0; j<n-1; j+= 2*i)
	{
		int k = j + i - 1;
		int c = min(j + 2*i - 1, n-1);
		merge(v,j, k, c);
	}
}
}
void imprimir(int v[], int tam){
	int i;
	for (i=0; i < tam; i++)
		printf("%d ", v[i]);
	printf("\n");
}
int main(){
	int v[10] = {10,9,8,7,6,5,4,3,2,1};
	
	int n = sizeof(v)/sizeof(v[0]);
	printf("Vetor: \n");
	
	imprimir(v, n);
	mergeSort(v, n);
	printf("\n\nVetor Ordenado: \n");
	
	imprimir(v, n);
	
	return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais