Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <sstream>
- using namespace std;
- struct Node
- {
- Node(string element, int order) {
- this->element = element;
- this->order = order;
- }
- Node() {
- this->element = '\0';
- this->order = -1;
- }
- string element;
- int order;
- };
- void insert(vector<Node>& nodes, string element, int order) {
- nodes.push_back(Node(element, order));
- int nodeIndex = nodes.size() - 1;
- int parent = (nodeIndex - 1) / 2;
- while (nodeIndex != 0 && nodes[nodeIndex].order < nodes[parent].order) {
- swap(nodes[nodeIndex], nodes[parent]);
- nodeIndex = parent;
- parent = (nodeIndex - 1) / 2;
- }
- }
- void heapify(vector<Node>& nodes, int index) {
- if (nodes.size() == index + 1) {
- return;
- }
- int smallest = index;
- if (index + 1 < nodes.size() && nodes[index + 1].order < nodes[index].order) {
- smallest = index + 1;
- }
- if (index + 2 < nodes.size() && nodes[index + 2].order < nodes[smallest].order) {
- smallest = index + 2;
- }
- if (smallest != index) {
- swap(nodes[index], nodes[smallest]);
- heapify(nodes, smallest);
- }
- }
- int main() {
- vector<Node> nodes = vector<Node>();
- string inputLine;
- getline(cin, inputLine);
- stringstream inputStream = stringstream(inputLine);
- string element = "";
- char buffer;
- while (inputStream >> noskipws >> buffer) {
- if (buffer == ' ') {
- int order;
- inputStream >> order;
- insert(nodes, element, order);
- element = "";
- inputStream >> noskipws >>buffer;
- }
- else {
- element += buffer;
- }
- }
- while (nodes.size() > 0) {
- cout << nodes[0].element;
- iter_swap(nodes.begin(), nodes.end() - 1);
- nodes.erase(nodes.end() - 1);
- heapify(nodes, 0);
- }
- }
Add Comment
Please, Sign In to add comment