Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.41 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. void swap (int *a, int *b){
  5.     int temp = *a;
  6.     *a = *b;
  7.     *b = temp;
  8. }
  9.  
  10. void change(int *arr, unsigned long int p, unsigned long int n){
  11.     unsigned long int max;
  12.     while ( (2*p + 1) < n ){
  13.         if ((2*p + 1 == n-1) || (arr[2*p + 1] > arr[2*p + 2]))
  14.             max = 2*p + 1;
  15.         else max = 2*p + 2;
  16.         if (arr[p] < arr[max]){
  17.             swap(&arr[p],&arr[max]);
  18.             p = max;
  19.         }
  20.         else break;
  21.     }
  22. }
  23.  
  24. void heapsort(int *arr, unsigned long int n){
  25.     long int i;
  26.     for ( i = n/2 - 1; i > 0; --i){
  27.         change(arr, (unsigned long int)i, (unsigned long int)n);
  28.     }
  29.     for ( i = (long int)n - 1; i > 0; --i){
  30.         swap(&arr[0],&arr[i]);
  31.         change(arr, 0, (unsigned long int)i);
  32.     }
  33. }
  34.  
  35. int main(void) {
  36.     long int n = 0;
  37.  
  38.     if (scanf("%1d\n", &n) == EOF) {
  39.         printf("bad input");
  40.         return 1;
  41.     }
  42.     int *arr = malloc((unsigned long int) n * sizeof(int));
  43.     if (arr == NULL) {
  44.         printf("memory error");
  45.         return 1;
  46.     }
  47.     unsigned long int i = 0;
  48.     while (i < (unsigned long int) n) {
  49.         if (scanf("%d", &arr[i]) == EOF) {
  50.             printf("bad input");
  51.             return 1;
  52.         }
  53.         ++i;
  54.     }
  55.     heapsort(arr, (unsigned long int)n);
  56.  
  57.     for (i = 0; i < (unsigned long int)n; ++i){
  58.         printf("%d", a[i])
  59.     }
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement