Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.51 KB | None | 0 0
  1. #ifdef _MSC_VER
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #endif
  4. #include <iostream>
  5. #include <fstream>
  6. #include <time.h>
  7. #include <stdlib.h>
  8.  
  9.  
  10. #define Max_Size 5001
  11.  
  12. using namespace std;
  13.  
  14. int counterAT, counterCT, counterAB, counterCB;
  15.  
  16. void Bottom_Up(int arr[], int n, int root)
  17. {
  18.     int largest = root;
  19.     int leftChildIndex = 2 * root + 1;               
  20.     int rightChildIndex = 2 * root + 2;
  21.  
  22.     counterCB++;
  23.     if(leftChildIndex < n && arr[largest] < arr[leftChildIndex])
  24.     {
  25.         largest = leftChildIndex;
  26.     }
  27.  
  28.     counterCB++;                                                               
  29.     if (rightChildIndex < n && arr[largest] < arr[rightChildIndex])
  30.     {
  31.         largest = rightChildIndex;
  32.     }
  33.  
  34.     if (largest != root)
  35.     {
  36.         int buffer = arr[root];
  37.         arr[root] = arr[largest];
  38.         arr[largest] = buffer;
  39.  
  40.         counterAB += 3;                                                
  41.         Bottom_Up(arr, n, largest);
  42.     }
  43. }
  44.  
  45. void BuildHeapBU(int arr[], int n)
  46. {
  47.     int i;
  48.     for (i = (n / 2) - 1; i >= 0; i--)
  49.     {
  50.         Bottom_Up(arr, n, i);
  51.     }
  52. }
  53.  
  54. void HeapSortBu(int arr[], int n)
  55. {
  56.     BuildHeapBU(arr, n);
  57.     int i;
  58.     for (i = n -1 ; i >= 0; i--)
  59.     {
  60.         int buffer = arr[0];
  61.         arr[0] = arr[i];
  62.         arr[i] = buffer;
  63.        
  64.         Bottom_Up(arr, i, 0);
  65.     }
  66. }
  67.  
  68. void print_array(int arr[], int n)
  69. {
  70.     for (int i = 0; i < n; i++)
  71.     {
  72.         cout << arr[i]<<" ";
  73.        
  74.     }
  75.     cout << "\n";
  76. }
  77.  
  78. // END BOTTOM-UP
  79.  
  80. //START TOP-DOWN
  81.  
  82. void RecursiveSwim(int arr[], int index)
  83. {
  84.     if (index == 0) return;
  85.     else
  86.     {
  87.         int parent = (index - 1) / 2;
  88.  
  89.         counterCT++;                                       
  90.  
  91.         if (arr[parent] < arr[index])
  92.         {
  93.             int buff = arr[index];
  94.             arr[index] = arr[parent];
  95.             arr[parent] = buff;
  96.  
  97.             counterAT += 3;                            
  98.  
  99.             RecursiveSwim(arr, parent);
  100.         }
  101.     }
  102.  
  103. }
  104.  
  105. void iterative_swim(int arr[], int index)
  106. {
  107.    
  108.     while ((index > 0) && (arr[(index - 1) / 2] < arr[index]))
  109.     {
  110.         counterCT++;                                                   
  111.  
  112.         int buff = arr[index];
  113.         arr[index] = arr[(index - 1) / 2];
  114.         arr[(index - 1) / 2] = buff;
  115.  
  116.         counterAT += 3;                                                
  117.         index = (index - 1) / 2;
  118.     }
  119.     counterCT++;                                                       
  120. }
  121.  
  122. void BuildheapTD(int arr[], int n)
  123. {
  124.  
  125.     for (int heapsize = 1; heapsize < n; heapsize++)
  126.     {
  127.         RecursiveSwim(arr, heapsize);
  128.     }
  129. }
  130.  
  131. // END TOP-DOWN
  132.  
  133.  
  134. int main()
  135. {
  136.     ofstream MyFile;
  137.     MyFile.open("MyFile.csv");
  138.     MyFile << "n,BU A average, BU C Average,BU T Average,TD A Average,TD C Average,TD T Average" << "\n";
  139.     int arr1[Max_Size], arr2[Max_Size];
  140.     srand((unsigned int)time(NULL));
  141.     for (int n = 200; n <= 5000; n = n + 200)
  142.     {
  143.         for (int i = 0; i < n; i++)
  144.         {
  145.             arr1[i] = rand() % Max_Size;
  146.             arr2[i] = arr1[i];
  147.         }
  148.  
  149.            
  150.         counterAT = 0; 
  151.         counterCT = 0;
  152.         counterAB = 0;
  153.         counterCB = 0;
  154.  
  155.         BuildHeapBU(arr1, n);
  156.         BuildheapTD(arr2, n);
  157.        
  158.         MyFile << n << "," << counterAB << "," << counterCB << "," << counterAB + counterCB << "," << counterAT << "," << counterCT << "," << counterAT + counterCT <<endl;
  159.  
  160.       }
  161.     MyFile << "n, BU A Best, BU C Best, BU T Best,TD A Best, TD C Best, TD T Best " << "\n";
  162.     for (int n = 200; n <= 5000; n = n + 200)
  163.     {
  164.         for (int i = 0; i < n; i++)
  165.         {
  166.             arr1[i] = i;
  167.            
  168.         }
  169.         counterAB = 0;
  170.         counterCB = 0;
  171.         BuildHeapBU(arr1, n);
  172.  
  173.         for (int i = 0; i < n; i++)
  174.         {
  175.             arr2[i] = i;
  176.             counterAT = 0;
  177.             counterCT = 0;
  178.             BuildheapTD(arr2, n);
  179.         }
  180.         MyFile << n << "," << counterAB << "," << counterCB << "," << counterAB + counterCB << "," << counterAT << "," << counterCT << "," << counterAT + counterCT << endl;
  181.     }
  182.     MyFile << "n, BU A Worst, BU C Worst, BU T Worst, TD A Worst, TD C Worst,TD T Worst" << "\n";
  183.     for (int n = 200; n <= 5000; n = n + 200)
  184.     {
  185.    
  186.         for (int i = 0; i < n; i++)
  187.         {
  188.             arr1[i] = n - i + 1;
  189.             counterAB = 0;
  190.             counterCB = 0;
  191.             BuildHeapBU(arr1, n);
  192.         }
  193.        
  194.         for (int i = 0; i < n; i++)
  195.         {
  196.             arr2[i] = n - i + 1;
  197.             counterAT = 0;
  198.             counterCT = 0;
  199.             BuildheapTD(arr2, n);
  200.         }
  201.        
  202.         MyFile << n << "," << counterAB << "," << counterCB << "," << counterAB + counterCB << "," << counterAT << "," << counterCT << "," << counterAT + counterCT << endl;
  203.     }
  204.  
  205.     MyFile.close();
  206.  
  207.     cout << "Bottom:\n";
  208.     int n = 10;
  209.     for (int i = 1; i <= n; i++)
  210.         arr1[i] = rand() % Max_Size;
  211.     for (int i = 1; i <= n; i++)
  212.         cout << arr1[i] << " ";
  213.     cout << endl;
  214.     HeapSortBu(arr1, n);
  215.     for (int i = 1; i <= n; i++)
  216.         cout << arr1[i] << " ";
  217.     cout << endl;
  218.  
  219.  
  220.  
  221.  
  222.  
  223.     /*cout << "Top:\n";
  224.     for (int i = 1; i <= n; i++)
  225.         arr2[i] = rand() % Max_Size;
  226.     for (int i = 1; i <= n; i++)
  227.         cout << arr2[i] << " ";
  228.     cout << endl;
  229.      HeapSortBu(arr2, n);
  230.     for (int i = 1; i <= n; i++)
  231.         cout << arr2[i] << " ";
  232.     cout << endl;
  233.  */
  234.  
  235.     return 0;
  236. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement