Advertisement
darkjessy94

Heapsort

Sep 9th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define MAX 20
  4.  
  5. int ArraySize, HeapSize, tot;
  6. int left(int i) { return 2*i+1;}
  7. int right(int i) { return 2*i+2;}
  8. int p(int i) {return (i-1)/2;}
  9.  
  10. void swap(int A[MAX], int i, int j)
  11. {
  12.     int tmp = A[i];
  13.     A[i] = A[j];
  14.     A[j] =tmp;
  15. }
  16. void Heapify(int A[MAX], int i);
  17. void BuildHeap(int A[MAX]);
  18. void HeapSort(int A[MAX]);
  19.  
  20. void main()
  21. {
  22.     int A[MAX], k;
  23.     printf("\nQuanti elementi deve contenere l'array: ");
  24.     scanf("%d",&tot);
  25.  
  26.     while (tot>MAX)
  27.     {   printf("\n max 20 elementi: "); scanf("%d",&tot);}
  28.  
  29.     for (k=0;k<tot;k++) {
  30.         printf("\nInserire il %d° elemento: ",k+1);
  31.         scanf("%d",&A[k]); }
  32.  
  33.     HeapSize=ArraySize=tot;
  34.     HeapSort(A);
  35.     printf("\nArray Ordinato:");
  36.     for (k=0;k<tot;k++)
  37.         printf(" %d",A[k]);
  38.  
  39. }
  40. void HeapSort(int A[MAX])
  41. {
  42.     int i;
  43.     BuildHeap(A);
  44.     for (i=ArraySize-1; i>0; i--)
  45.     {
  46.         swap(A, 0, i);
  47.         HeapSize--;
  48.         Heapify(A, 0);
  49.     }
  50. }
  51.  
  52. void BuildHeap(int A[MAX])
  53. {
  54.     int i;
  55.     HeapSize = ArraySize;
  56.     for (i=ArraySize/2; i>=0; i--)
  57.         Heapify(A, i);
  58. }
  59.  
  60. void Heapify(int A[MAX], int i)
  61. {
  62.     int l,r,massimo;
  63.     l=left(i);
  64.     r=right(i);
  65.  
  66.     if(l < HeapSize && A[l] > A[i])
  67.         massimo = l;
  68.     else
  69.         massimo = i;
  70.  
  71.     if( r < HeapSize && A[r] > A[massimo] )
  72.         massimo = r;
  73.  
  74.     if(massimo!=i)
  75.     {
  76.         swap(A,i,massimo);
  77.         Heapify(A,massimo);
  78.     }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement