Advertisement
Shiam7777777

Untitled

Feb 8th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.48 KB | None | 0 0
  1.             //  Heap_sort_Decreasing_order_Using_MinHeap
  2.  
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. void heapSort(int a[], int n, int h);
  8. void buildMinHeap(int a[], int n, int h);
  9. void minHeapify(int a[], int h, int i);
  10. int left(int i);
  11. int right(int i);
  12.  
  13. int main(){
  14.     int a[20], n, h;
  15.     cout << "How many numbers?: ";
  16.     cin >> n;
  17.     h = n;
  18.     cout << "\nEnter numbers: ";
  19.     for(int i = 1; i <= n; ++i)
  20.         cin >> a[i];
  21.     heapSort(a, n, h);
  22.     cout << "\nOutput numbers in sorted order: ";
  23.     for(int i = 1; i <= n; ++i)
  24.         cout << " " << a[i];
  25.     return 0;
  26. }
  27.  
  28. void heapSort(int a[], int n, int h){
  29.     buildMinHeap(a, n, h);
  30.     for(int i = n; i >= 2; --i){
  31.         swap(a[1], a[i]);
  32.         h--;
  33.         minHeapify(a, h, 1);
  34.     }
  35. }
  36.  
  37. void buildMinHeap(int a[], int n, int h){
  38.     h = n;
  39.     for(int i = (n/2); i >= 1; --i)
  40.         minHeapify(a, h, i);
  41. }
  42.  
  43. void minHeapify(int a[], int h, int i){
  44.     int l = left(i);
  45.     int r = right(i);
  46.     int smallest;
  47.     if(l <= h && a[l] < a[i])
  48.         smallest = l;
  49.     else
  50.         smallest = i;
  51.     if(r <= h && a[r] < a[smallest])
  52.         smallest = r;
  53.     if(smallest != i){
  54.         swap(a[i], a[smallest]);
  55.         minHeapify(a, h, smallest);
  56.     }
  57. }
  58.  
  59. int left(int i){
  60.     return (2 * i);
  61. }
  62.  
  63. int right(int i){
  64.     return (2 * i + 1);
  65. }
  66.  
  67.                 //  heap_decrease_key
  68.  
  69. #include <iostream>
  70.  
  71. using namespace std;
  72.  
  73. void HeapDecreaseKey(int a[], int n, int h);
  74. void BuildMinHeap(int a[], int n, int h);
  75. void MinHeapify(int a[], int h, int i);
  76. int left(int i);
  77. int right(int i);
  78.  
  79.  
  80.  
  81. int main(){
  82.     int a[100], n, h;
  83.     cout << "How many items?: ";
  84.     cin >> n;
  85.     h = n;
  86.     cout << "\nEnter the values: ";
  87.     for(int i = 1; i <= n; ++i)
  88.         cin >> a[i];
  89.  
  90.     HeapDecreaseKey(a, n, h);
  91.     cout << "\nResulting min-heap: ";
  92.     for(int j = 1; j <= n; ++j)
  93.         cout << " " << a[j];
  94. return 0;
  95. }
  96.  
  97. void HeapDecreaseKey(int a[], int n, int h){
  98.     int key, i;
  99.     BuildMinHeap(a, n, h);
  100.     cout << "\nKey value: ";
  101.     cin >> key;
  102.     cout << "\nIndex: ";
  103.     cin >> i;
  104.     if(key > a[i])
  105.         cout << "\nNew key is greater than current key";
  106.     a[i] = key;
  107.     while(i>1 && a[i/2]>a[i]){
  108.         swap(a[i], a[i/2]);
  109.         i = i/2;
  110.     }
  111. }
  112.  
  113. void BuildMinHeap(int a[], int n, int h){
  114.     h = n;
  115.     for(int i = (n/2); i >= 1; --i)
  116.         MinHeapify(a, h, i);
  117. }
  118.  
  119. void MinHeapify(int a[], int h, int i){
  120.     int l = left(i);
  121.     int r = right(i);
  122.     int smallest;
  123.     if(l <= h && a[l] < a[i])
  124.         smallest = l;
  125.     else
  126.         smallest = i;
  127.     if(r <= h && a[r] < a[smallest])
  128.         smallest = r;
  129.     if(smallest != i){
  130.         swap(a[i], a[smallest]);
  131.         MinHeapify(a, h, smallest);
  132.     }
  133. }
  134.  
  135. int left(int i){
  136.     return (2*i);
  137. }
  138.  
  139. int right(int i){
  140.     return (2*i + 1);
  141. }
  142.  
  143.                 //  min_heap_insert
  144.  
  145. #include <iostream>
  146.  
  147. using namespace std;
  148.  
  149. void MinHeapInsert(int a[], int n, int h);
  150. void HeapDecreaseKey(int a[], int n, int h);
  151. void BuildMinHeap(int a[], int n, int h);
  152. void MinHeapify(int a[], int h, int i);
  153. int left(int i);
  154. int right(int i);
  155.  
  156.  
  157.  
  158. int main(){
  159.     int a[100], n, h;
  160.     cout << "How many items?: ";
  161.     cin >> n;
  162.     h = n;
  163.     cout << "\nEnter the values: ";
  164.     for(int i = 1; i <= n; ++i)
  165.         cin >> a[i];
  166.  
  167.     MinHeapInsert(a,n,h);
  168.     cout << "\nResulting min-heap: ";
  169.     for(int j = 1; j <= (n+1); ++j)
  170.         cout << " " << a[j];
  171. return 0;
  172. }
  173.  
  174. void MinHeapInsert(int a[], int n, int h){
  175.     h++;
  176.     a[h] = 99999;
  177.     HeapDecreaseKey(a, n, h);
  178. }
  179.  
  180. void HeapDecreaseKey(int a[], int n, int h){
  181.     int key, i;
  182.     BuildMinHeap(a, n, h);
  183.     cout << "\nKey value: ";
  184.     cin >> key;
  185. //    cout << "\nIndex: ";
  186. //    cin >> i;
  187.     if(key > a[h])
  188.         cout << "\nNew key is greater than current key";
  189.     a[h] = key;
  190.     while(h>1 && a[h/2]>a[h]){
  191.         swap(a[h], a[h/2]);
  192.         h = h/2;
  193.     }
  194. }
  195.  
  196. void BuildMinHeap(int a[], int n, int h){
  197.     h = n;
  198.     for(int i = (n/2); i >= 1; --i)
  199.         MinHeapify(a, h, i);
  200. }
  201.  
  202. void MinHeapify(int a[], int h, int i){
  203.     int l = left(i);
  204.     int r = right(i);
  205.     int smallest;
  206.     if(l <= h && a[l] < a[i])
  207.         smallest = l;
  208.     else
  209.         smallest = i;
  210.     if(r <= h && a[r] < a[smallest])
  211.         smallest = r;
  212.     if(smallest != i){
  213.         swap(a[i], a[smallest]);
  214.         MinHeapify(a, h, smallest);
  215.     }
  216. }
  217.  
  218. int left(int i){
  219.     return (2*i);
  220. }
  221.  
  222. int right(int i){
  223.     return (2*i + 1);
  224. }
  225.  
  226.                     //  heap_extract_min
  227.  
  228. #include <iostream>
  229.  
  230. using namespace std;
  231.  
  232. void BuildMinHeap(int a[], int n, int h);
  233. void MinHeapify(int a[], int h, int i);
  234. int left(int i);
  235. int right(int i);
  236. int HeapExtractMin(int a[], int n, int h);
  237.  
  238. int main(){
  239.     int a[100], n, h;
  240.     cout << "How many items ?: ";
  241.     cin >> n;
  242.     h = n;
  243.     cout << "\nEnter the items: ";
  244.     for(int i = 1; i <= n; ++i)
  245.         cin >> a[i];
  246.     int m = HeapExtractMin(a, n, h);
  247.     cout << "\nThe Minimum is: " << m;
  248. return 0;
  249. }
  250.  
  251. int HeapExtractMin(int a[], int n, int h){
  252.     BuildMinHeap(a, n, h);
  253.     int min;
  254.     if(h < 1)
  255.         cout << "\nERROR: Heap Underflow";
  256.     min = a[1];
  257.     a[1] = a[h];
  258.     h--;
  259.     MinHeapify(a, h, 1);
  260.     return min;
  261. }
  262.  
  263. void BuildMinHeap(int a[], int n, int h){
  264.     h = n;
  265.     for(int i = (n/2); i >= 1; --i)
  266.         MinHeapify(a, h, i);
  267. }
  268.  
  269. void MinHeapify(int a[], int h, int i){
  270.     int l = left(i);
  271.     int r = right(i);
  272.     int smallest;
  273.     if(l <= h && a[l] < a[i])
  274.         smallest = l;
  275.     else
  276.         smallest = i;
  277.     if(r <= h && a[r] < a[smallest])
  278.         smallest = r;
  279.     if(smallest != i){
  280.         swap(a[i], a[smallest]);
  281.         MinHeapify(a, h, smallest);
  282.     }
  283. }
  284.  
  285. int left(int i){
  286.     return (2*i);
  287. }
  288.  
  289. int right(int i){
  290.     return (2*i + 1);
  291. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement