Advertisement
Jakubowiczish

Untitled

Mar 10th, 2018
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. int LeftChild(int i)
  2. {
  3. return i*2;
  4. }
  5. int RightChild(int i)
  6. {
  7. return i*2 + 1;
  8. }
  9. int Parent(int i)
  10. {
  11. return i/2;
  12. }
  13.  
  14. void heapify(int tab[], int index)
  15. {
  16. int size = tab[0];
  17. int largest = index;
  18. int left = LeftChild(index);
  19. int right = RightChild(index);
  20.  
  21. if(left <= size and tab[left] > tab[largest])
  22. largest = left;
  23. if(right <= size and tab[right] > tab[largest])
  24. largest = right;
  25.  
  26. if(largest != index){
  27. swap(tab[largest],tab[index]);
  28. heapify(tab,largest);
  29. }
  30. }
  31.  
  32. void BuildHeap(int tab[], int N)
  33. {
  34. tab[0] = N-1;
  35. for(int i = (N-1)/2; i >= 1; i--)
  36. heapify(tab,i);
  37. }
  38.  
  39. int HeapSort(int tab[], int N)
  40. {
  41. BuildHeap(tab,N);
  42. for(int i = N-1; i>1; i--){
  43. swap(tab[1],tab[i]);
  44. tab[0]--;
  45. heapify(tab,i);
  46. }
  47. }
  48.  
  49. void printTable(int tab[], int N)
  50. {
  51. for(int i=0; i < N; i++){
  52. cout << tab[i] <<" ";
  53. }
  54. cout << endl;
  55. }
  56.  
  57. void setTable(int tab[], int N)
  58. {
  59. srand(time( NULL ));
  60. for (int i=0; i < N; i++){
  61. tab[i] = rand()% 50 + 1;
  62. }
  63. }
  64.  
  65. int main()
  66. {
  67. int N = 10;
  68. int tab[N];
  69. setTable(tab,N);
  70. printTable(tab,N);
  71. HeapSort(tab,N);
  72. printTable(tab,N);
  73.  
  74. return 0;
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement