Advertisement
Guest User

Untitled

a guest
Mar 28th, 2020
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.13 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int parent(int i){
  5.     return i / 2;
  6. }
  7. int left(int i){
  8.     return i * 2;
  9. }
  10. int right(int i){
  11.     return i * 2 + 1;
  12. }
  13.  
  14.  
  15. void heapify(int arr[], int i){
  16.     int l = left(i);
  17.     int r = right(i);
  18.     int max = i;
  19.     if (l <= arr[0] && arr[l] > arr[max]) max = l;
  20.     if (r <= arr[0] && arr[r] > arr[max]) max = r;
  21.     if (max != i){
  22.         int temp = arr[max];
  23.         arr[max] = arr[i];
  24.         arr[i] = temp;
  25.         heapify(arr, max);
  26.     }
  27. }
  28.  
  29. void buildHeap(int arr[]){
  30.     for(int i = arr[0] / 2; i > 0; i--) {
  31.         heapify(arr, i);
  32.     }
  33. }
  34.  
  35. void heapSort(int arr[]){
  36.     buildHeap(arr);
  37.     for(int i = arr[0]; i > 1; i--){
  38.         int temp = arr[i];
  39.         arr[i] = arr[1];
  40.         arr[1] = temp;
  41.         arr[0] -= 1;
  42.         heapify(arr, 1);
  43.     }
  44. }
  45.  
  46. int main() {
  47.     int n;
  48.    
  49.    
  50.     scanf("%d", &n);
  51.     int* arr = (int*)malloc((n + 1) * sizeof(int));
  52.     for (int i = 1; i < n + 1; i++) {
  53.         scanf("%d", &arr[i]);
  54.     }
  55.     arr[0] = n;
  56.     heapSort(arr);
  57.     for(int i = 1; i < n + 1; i++){
  58.         printf("%d ", arr[i]);
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement