JellyKuo

WHY

Dec 14th, 2020 (edited)
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <sstream>
  5.  
  6. using namespace std;
  7.  
  8. struct Node
  9. {
  10.     Node(string element, int order) {
  11.         this->element = element;
  12.         this->order = order;
  13.     }
  14.  
  15.     Node() {
  16.         this->element = '\0';
  17.         this->order = -1;
  18.     }
  19.  
  20.     string element;
  21.     int order;
  22. };
  23. void insert(vector<Node>& nodes, string element, int order) {
  24.     nodes.push_back(Node(element, order));
  25.     int nodeIndex = nodes.size() - 1;
  26.     int parent = (nodeIndex - 1) / 2;
  27.     while (nodeIndex != 0 && nodes[nodeIndex].order < nodes[parent].order) {
  28.         swap(nodes[nodeIndex], nodes[parent]);
  29.         nodeIndex = parent;
  30.         parent = (nodeIndex - 1) / 2;
  31.     }
  32. }
  33. void heapify(vector<Node>& nodes, int index) {
  34.     if (nodes.size() == index + 1) {
  35.         return;
  36.     }
  37.     int smallest = index;
  38.     if (index + 1 < nodes.size() && nodes[index + 1].order < nodes[index].order) {
  39.         smallest = index + 1;
  40.     }
  41.     if (index + 2 < nodes.size() && nodes[index + 2].order < nodes[smallest].order) {
  42.         smallest = index + 2;
  43.     }
  44.     if (smallest != index) {
  45.         swap(nodes[index], nodes[smallest]);
  46.         heapify(nodes, smallest);
  47.     }
  48. }
  49.  
  50. int main() {
  51.     vector<Node> nodes = vector<Node>();
  52.     string inputLine;
  53.     getline(cin, inputLine);
  54.     stringstream inputStream = stringstream(inputLine);
  55.     string element = "";
  56.     char buffer;
  57.     while (inputStream >> noskipws >> buffer) {
  58.         if (buffer == ' ') {
  59.             int order;
  60.             inputStream >> order;
  61.             insert(nodes, element, order);
  62.             element = "";
  63.             inputStream >> noskipws >>buffer;
  64.         }
  65.         else {
  66.             element += buffer;
  67.         }
  68.     }
  69.  
  70.     while (nodes.size() > 0) {
  71.         cout << nodes[0].element;
  72.         iter_swap(nodes.begin(), nodes.end() - 1);
  73.         nodes.erase(nodes.end() - 1);
  74.         heapify(nodes, 0);
  75.     }
  76. }
Add Comment
Please, Sign In to add comment