Heap Sort em C

Publicado por leone duarte de oliveira (última atualização em 04/05/2018)

[ Hits: 8.982 ]

Homepage: leone duarte

Download HEAP SORT.rar




Método de ordenação Heap Sorte, feito em projeto.

Necessário ter os 3 arquivos para funcionar. Copie cada um em seu respectivo arquivo. Verifique se os nomes dos arquivos e seus respectivos #include no código-fonte.

  



Esconder código-fonte

//////MAIN//////
/*
DESENVOLVIDO POR LEONE DUARTE DE OLIVEIRA
MATERIA: ORDENAÇÃO E PESQUISA
PROFESSOR:MAICON RIBEIRO
DATA: 29/03/2018
*/
#include"heap.h"

main(){
   int tamanho_vetor, *vetor,contador,contador2=0,maior,cont,sair=0,menu1;
   int aux;
   
   while(sair==0){
      printf("\n\t\t--------------------------------------\n");
      printf("\n\t\t\tORDENACAO USANDO HEAP SORT\n\n\t\t\t1-GERAR NOVO VETOR\n\t\t\t2-SAIR\n\t\t\t>>>>>");
      printf("\n\t\t--------------------------------------\n");
      scanf("%d",&menu1);
      system("cls");
      
      switch(menu1){
         
         case 1:
            printf("\nINSIRA O TAMANHO DO VETOR:\n");
            scanf("%d",&tamanho_vetor);
            
            vetor = malloc(sizeof(int)* (tamanho_vetor)); 
            srand(time(NULL));
         
            //gerando vetores aleatorios
            for(contador = 0; contador < tamanho_vetor; contador++){
               vetor[contador]= rand()%100;   
            }
            
            //exibindo desordenado
            for(contador2=0; contador2 < tamanho_vetor; contador2++){
               printf("numero %d: %d\n",contador2,vetor[contador2]);
            }
            
            printf("\n\n--------------------------------------\n\n");
            
            clock_t hora_inicial = clock();
            heap_sort(vetor, tamanho_vetor);
                        
            cont = tamanho_vetor-1;
                              
            while(cont >= 0 ){
               //mandando o maior para o começo
               heap_sort(vetor, cont);
               //mandando maior para o final
               for(contador = 0; contador < cont; contador++){
                  
                  aux = vetor[contador];
                  vetor[contador] = vetor[contador+1];
                  vetor[contador+1] = aux;
                                 
               }
               
               heap_sort(vetor, cont);   
               cont--;
            }
            clock_t hora_final = clock();
            
            //exibindo organizado            
            for(contador2 = 0; contador2 < tamanho_vetor; contador2++){
               printf("numero %d: %d\n",contador2, vetor[contador2]);
               
            }
            double tempo_gasto = ( (double) (hora_final - hora_inicial) ) / CLOCKS_PER_SEC;
               printf("TEMPO GASTO USANDO HEAP SORT: %lf s\n", tempo_gasto);
            
            system("pause");
            system("cls");
         break;
         
         case 2:
            printf("\nATE LOGO...");
            sair=1;
            
         break;
            
      }
   }
}
//////////////////////////////////////////////////////////////////////////////////////////////////////HEAP.C/////////////////////////////////////////////////////////////////////////////////////////////////
#include"heap.h"

int heap_sort(int *vetor, int tamanho){
   
   int pai_direita, pai_esquerda, aux, contador;

   
   for(contador = tamanho-1;  contador >= 0;  contador-- ){
      
      //descobrindo o a raiz de cada galho
      pai_direita  = (contador / 2) - 1;
      pai_esquerda = (contador - 2) / 2;
      
      //trocando caso a raiz seja manor que o galho da direita
       if(vetor[contador] > vetor[pai_direita]){
         
         aux = vetor[contador];
         vetor[contador] = vetor[pai_direita];
         vetor[pai_direita] = aux;         
         
      }
      
      //trocando caso a raiz seja menor que o galhp da esquerda
      else if (vetor[contador-1] > vetor[pai_esquerda] ){

         aux = vetor[contador-1];
         vetor[contador-1] = vetor[pai_esquerda];
         vetor[pai_esquerda] = aux;
         
      }

   }
}

///////HEAP.H/////
#include<stdlib.h>
#include<stdio.h>
#include<time.h>

int heap_sort(int *vetor, int tamanho);//recebe um vetor um tamanho com o objetivo de mover o maior valor sempre para primeira posição

Scripts recomendados

Aritmética de ponteiros (gcc)

merge sort

merge sort

Photon Mapper

métodos de ordenação


  

Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts