Advertisement
Guest User

Untitled

a guest
May 25th, 2015
228
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. #include <stdio.h>
  2. #include "helper.c"
  3. #define PARENT(x) x/2
  4. #define LEFT(x) 2*x
  5. #define RIGHT(x) 2*x+1
  6.  
  7. struct heap
  8. {
  9. int *data;
  10. int data_length;
  11. int size;
  12. };
  13.  
  14. void heapify(struct heap *a, int i);
  15. void build_heap(struct heap *a);
  16. void heapsort(struct heap *a);
  17.  
  18. int main()
  19. {
  20. // tworzenie kopca
  21. struct heap a;
  22. a.data = data_create();
  23. a.data_length = data_length();
  24.  
  25. // prezentowanie nieposortowanych danych
  26. data_print(a.data, a.data_length);
  27.  
  28. // sortowanie
  29. heapsort(&a);
  30.  
  31. // prezentowanie posortowanych danych
  32. data_print(a.data, a.data_length);
  33.  
  34. // niszczenie tablicy
  35. data_destroy(a.data);
  36.  
  37. return 0;
  38. }
  39.  
  40. void heapify(struct heap *a, int i)
  41. {
  42. int max_ind = i;
  43. if(LEFT(i) < a->size && a->data[LEFT(i)] > a->data[max_ind])
  44. max_ind = LEFT(i);
  45. if(RIGHT(i) < a->size && a->data[RIGHT(i)] > a->data[max_ind])
  46. max_ind = RIGHT(i);
  47. if(max_ind != i)
  48. {
  49. swap(&a->data[max_ind], &a->data[i]);
  50. heapify(a, max_ind);
  51. }
  52. }
  53.  
  54. void build_heap(struct heap *a)
  55. {
  56. a->size = a->data_length;
  57. int i=PARENT(a->size-1);
  58. for(; i >= 0; i--)
  59. heapify(a, i);
  60. }
  61.  
  62. void heapsort(struct heap *a)
  63. {
  64. build_heap(a);
  65. int i=a->size-1;
  66. for(; i>0; i--)
  67. {
  68. swap(&a->data[0], &a->data[i]);
  69. a->size--;
  70. heapify(a, 0);
  71. }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement