Você está na página 1de 2

#include <stdio.

h>
#include <stdlib.h>
#include <math.h>

//============================================
//void printfVet(int *V , int N){
// int i;
// for(i = 0; i < N; i++)
// printf("%2d ",V[i]);
// printf("\n");
//}
//
//void printfLinha(){
// printf("----------------------------------------------\n");
//}
//
//void printfHeap(int *V){
// printf("\t\t%d\n",V[0]);
// printf("\t%d\t\t%d\n",V[1],V[2]);
// printf("%d\t%d\t\t%d\t%d\n",V[3],V[4],V[5],V[6]);
// printfLinha();
//}
//============================================
void criaHeap(int *vet, int i, int f){
int aux = vet[i];
int j = i * 2 + 1;
while (j <= f){ //ate o final do vetor
if(j < f){ //enquanto não chega no final do vetor (j+1)
if(vet[j] < vet[j + 1]){ //pai tem dois filhos qual é maior
j = j + 1;
}
}
if(aux < vet[j]){ //o filho maior é maior que o pai?
vet[i] = vet[j]; //se for troca
i = j; //i se torna o pai
j = 2 * i + 1; //faz novamente até o fim do vetor
}else{
j = f + 1; //se for maior sai do enquanto
}
}
vet[i] = aux; //coloca o valor no última posição do vetor
}

void heapSort(int *vet, int N){


int i, aux;
for(i=(N - 1)/2; i >= 0; i--){ //cria o heap a partir dos dados
criaHeap(vet, i, N-1);
}
for (i = N-1; i >= 1; i--){
aux = vet[0]; //
vet [0] = vet [i]; //
vet [i] = aux; //pega o maior elemento da heap e coloca na sua posição do array
criaHeap(vet, 0, i - 1); //reconstroi a heap
}
}

int main(){
//======================================================================
========
//int vet[11] = {1,23,4,67,-8,54,90,21,14,-5,1};
int vet[7] = {23,4,67,-8,90,54,21};
//int vet[7] = {1,2,3,4,5,6,7};
int N = 7;

printf("Sem ordenar:\n");
//printfVet(vet,N);
//printfLinha();

heapSort(vet,N);
//printfHeap(vet);

printf("Ordenado:\n");
//printfVet(vet,N);
//======================================================================
========

system("pause");
return 0;
}

Você também pode gostar