Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 20
- int ArraySize, HeapSize, tot;
- int left(int i) { return 2*i+1;}
- int right(int i) { return 2*i+2;}
- int p(int i) {return (i-1)/2;}
- void swap(int A[MAX], int i, int j)
- {
- int tmp = A[i];
- A[i] = A[j];
- A[j] =tmp;
- }
- void Heapify(int A[MAX], int i);
- void BuildHeap(int A[MAX]);
- void HeapSort(int A[MAX]);
- void main()
- {
- int A[MAX], k;
- printf("\nQuanti elementi deve contenere l'array: ");
- scanf("%d",&tot);
- while (tot>MAX)
- { printf("\n max 20 elementi: "); scanf("%d",&tot);}
- for (k=0;k<tot;k++) {
- printf("\nInserire il %d° elemento: ",k+1);
- scanf("%d",&A[k]); }
- HeapSize=ArraySize=tot;
- HeapSort(A);
- printf("\nArray Ordinato:");
- for (k=0;k<tot;k++)
- printf(" %d",A[k]);
- }
- void HeapSort(int A[MAX])
- {
- int i;
- BuildHeap(A);
- for (i=ArraySize-1; i>0; i--)
- {
- swap(A, 0, i);
- HeapSize--;
- Heapify(A, 0);
- }
- }
- void BuildHeap(int A[MAX])
- {
- int i;
- HeapSize = ArraySize;
- for (i=ArraySize/2; i>=0; i--)
- Heapify(A, i);
- }
- void Heapify(int A[MAX], int i)
- {
- int l,r,massimo;
- l=left(i);
- r=right(i);
- if(l < HeapSize && A[l] > A[i])
- massimo = l;
- else
- massimo = i;
- if( r < HeapSize && A[r] > A[massimo] )
- massimo = r;
- if(massimo!=i)
- {
- swap(A,i,massimo);
- Heapify(A,massimo);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement