/
MergeNSortedListToBuildSingleSortestList.cpp
114 lines (89 loc) · 2.4 KB
/
MergeNSortedListToBuildSingleSortestList.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//3rd Feb 2017 (4th) - Merge n Sorted Lists, Each Having m Numbers, into a Sorted List
#include "stdio.h"
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Data
{
private:
int data;
int sourceArray;
int nextIndex;
public:
Data(int data, int sourceArray, int nextIndex)
{
this->data = data;
this->sourceArray = sourceArray;
this->nextIndex = nextIndex;
}
int getData() const
{
return data;
}
int getSourceArray() const
{
return sourceArray;
}
int getNextIndex() const
{
return nextIndex;
}
};
class sortOperator
{
public:
int operator()(const Data &d1, const Data &d2)
{
return d1.getData() > d2.getData();
}
};
class sortOperatorInt
{
public:
int operator()(const int &d1, const int &d2)
{
return d1 > d2;
}
};
vector<vector<int>> GetData()
{
vector<vector<int>> grid;
static const int arr1[] = { 1, 3, 7, 12, 200, 231 };
vector<int> first(arr1, arr1 + sizeof(arr1) / sizeof(arr1[0]));
grid.push_back(first);
static const int arr2[] = { 2, 10, 17, 20, 21, 37 };
vector<int> second(arr2, arr2 + sizeof(arr2) / sizeof(arr2[0]));
grid.push_back(second);
static const int arr3[] = { 1, 1, 1, 1, 2000 };
vector<int> third(arr3, arr3 + sizeof(arr3) / sizeof(arr3[0]));
grid.push_back(third);
static const int arr4[] = { 1, 12, 19, 27, 33 };
vector<int> fourth(arr4, arr4 + sizeof(arr4) / sizeof(arr4[0]));
grid.push_back(fourth);
return grid;
}
void Sort(vector<vector<int>> grid)
{
std::priority_queue<Data, std::vector<Data>, sortOperator> q;
for (int i = 0; i < grid.size(); i++)
q.push(Data(grid[i][0], i, grid[i].size() >= 2 ? 1 : -1));
while (!q.empty())
{
Data d = q.top();
cout << d.getData() << endl;
q.pop();
if (d.getNextIndex() != -1)
q.push(Data(grid[d.getSourceArray()][d.getNextIndex()], d.getSourceArray(), d.getNextIndex() + 1 < grid[d.getSourceArray()].size() ? d.getNextIndex() + 1 : -1));
}
}
bool myfunction(int i, int j) { return (i < j); }
int main()
{
vector<vector<int>> grid = GetData();
vector<int> newData = { 3, 5, 22, 6, 87,4, 324 ,4 };
sort(newData.begin(), newData.end(), myfunction);
Sort(grid);
getchar();
return 0;
}