
Luiz314
(usa Ubuntu)
Enviado em 11/10/2015 - 16:19h
Pessoal, estou tendo problemas para ordenar um vetor usando o Merge Sort. A função particiona o vetor, mas não está ordenando os elementos. Aparece o seguinte erro: " ***stack smashing detected***". Segue o código que eu desenvolvi.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
void Intercala(int inicio, int meio, int final, int v[]){
int temp[MAX];
int I, M, i=0;
I = inicio;
M = meio;
while((I < M) && (M < final)){
if(v[I] <= v[M] ){
temp[i] = v[I];
I++;
i++;
}
else{
temp[i] = v[M];
M++;
i++;
}
}
while(I < M){
temp[i] = v[I];
i++;
I++;
}
while(M < final){
temp[i] = v[M];
i++;
M++;
}
for(i=inicio; i< final; i++){
v[i] = temp[i-inicio];
}
}
void MergeSort(int esquerda, int direita, int v[]){
int meio;
if(esquerda < direita){
meio = (esquerda + direita)/2;
MergeSort(esquerda, meio, v);
MergeSort(meio+1, direita, v);
Intercala(esquerda, meio+1, direita, v);
}
}
int main(){
int v[MAX];
int i;
printf("Merge Sort\n");
srand(time(NULL));
printf("Dados do Vetor: ");
for(i=0; i<MAX; i++){
v[i] = rand()%100;
printf("%d ", v[i]);
}
MergeSort(0, MAX, v);
printf("\nVetor ordenado: ");
for(i=0; i<MAX; i++){
printf("%d ", v[i]);
}
printf("\n");
return 0;
}