• Source
    1. // C++ program to merge k sorted arrays of size n each.
    2. #include<iostream>
    3. #include<limits.h>
    4. #include<bits/stdc++.h>
    5. using namespace std;
    6.  
    7. #define n 4
    8.  
    9. class heap{
    10. int element;
    11. int i;
    12. int j;
    13. public:
    14. heap(int _element, int _i, int _j)
    15. {
    16. element=_element;
    17. i=_i;
    18. j=_j;
    19. }
    20. int getelement(){return element;}
    21. int geti() {return i;}
    22. int getj() {return j;}
    23. };
    24. class comparator{
    25. public:
    26. bool operator()(heap h1, heap h2)
    27. {
    28. return h1.getelement()>h2.getelement();
    29. }
    30. };
    31. int *mergeKArrays(int a[][n], int k)
    32. {
    33. priority_queue<heap, std::vector<heap>, comparator> pq;
    34. int *output = new int[n*k]; // To store output array
    35. int p,q,r;
    36. for(int i=0;i<k;i++)
    37. {
    38. pq.push(heap(a[i][0],i,1));
    39.  
    40. }
    41. for(int count=0;count<n*k;count++)
    42. {
    43. heap x = pq.top();
    44. output[count]= x.getelement();
    45. q=x.geti();
    46. r=x.getj();
    47. pq.pop();
    48. if(r<n)
    49. {
    50.  
    51. p = a[x.geti()][x.getj()];
    52. r=x.getj()+1;
    53.  
    54. }
    55. else
    56. {
    57. p = INT_MAX;
    58. }
    59. pq.push(heap(p,q,r));
    60.  
    61. }
    62.  
    63.  
    64.  
    65. return output;
    66. }
    67.  
    68.  
    69.  
    70. // A utility function to swap two elemen
    71.  
    72. // A utility function to print array elements
    73. void printArray(int arr[], int size)
    74. {
    75. for (int i=0; i < size; i++)
    76. cout << arr[i] << " ";
    77. }
    78.  
    79. // Driver program to test above functions
    80. int main()
    81. {
    82. // Change n at the top to change number of elements
    83. // in an array
    84. int arr[][n] = {{2, 6, 12, 34},
    85. {1, 9, 20, 1000},
    86. {23, 34, 90, 2000}};
    87. int k = sizeof(arr)/sizeof(arr[0]);
    88.  
    89. int *output = mergeKArrays(arr, k);
    90.  
    91. cout << "Merged array is " << endl;
    92. printArray(output, n*k);
    93.  
    94. return 0;
    95. }
    96.