timealgorithms.cxx 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <cstdio>
  2. #include <iostream>
  3. #include <string>
  4. #include <fstream>
  5. #include <sstream>
  6. #include <ctime>
  7. #include <vector>
  8. #include "json.hpp"
  9. #include "insertionsort.h"
  10. #include "mergesort.h"
  11. #include "quicksort.h"
  12. int main(int argc, char* argv[]) {
  13. // read JSON file and store in jsonObject
  14. std::ifstream file;
  15. file.open(argv[1]);
  16. nlohmann::json jsonObject;
  17. // Store the contents filename into jsonObject
  18. if (file.is_open()) {
  19. file >> jsonObject;
  20. }
  21. // initiate CSV file quickto which data will be written
  22. std::ofstream theFile;
  23. theFile.open("timealgorithms.csv");
  24. theFile << "Sample,InsertionSortTime,InsertionSortCompares,InsertionSortMemaccess,MergeSortTime,MergeSortCompares,MergeSortMemaccess,QuickSortTime,QuickSortCompares,QuickSortMemaccess,\n";
  25. // initialize array for JSON data
  26. //int n = jsonObject["metadata"]["arraySize"];
  27. std::vector<int>* sampleArray = new std::vector<int>();
  28. // initialize insertion sort variables
  29. int *insReturnArray;
  30. double insStartTime;
  31. double insTime;
  32. // initialize merge sort variables
  33. int *mergeReturnArray;
  34. double merStartTime;
  35. double merTime;
  36. // initialize quick sort variables
  37. int *quickReturnArray;
  38. double quickStartTime;
  39. double quickTime;
  40. std::string sampleName; // Sample key name to iterate
  41. for (auto itr = jsonObject.begin(); itr != jsonObject.end(); ++itr) {
  42. sampleName = itr.key();
  43. if (sampleName != "metadata") {
  44. for (auto arrayItr = jsonObject[sampleName].begin(); arrayItr != jsonObject[sampleName].end(); ++arrayItr) {
  45. sampleArray -> push_back(*arrayItr);
  46. }
  47. // Add the sample name to the CSV file line
  48. theFile << itr.key() << ",";
  49. // insertion sort evaluation
  50. insStartTime = time(0);
  51. insReturnArray = InsertionSort(sampleArray);
  52. insTime = time(0) - insStartTime;
  53. std::cout << "insertion sort comparison counter: " << *insReturnArray << std::endl;
  54. std::cout << "insertion sort memory access counter: " << *(insReturnArray + 1) << std::endl;
  55. std::cout << "wallclock time for insertion sort: " << insTime << std::endl;
  56. // Add the insertion sort data to the CSV file line
  57. theFile << insTime << "," << *insReturnArray << "," << *(insReturnArray + 1) << "," ;
  58. // merge sort evaluation
  59. merStartTime = time(0);
  60. mergeReturnArray = MergeSort(sampleArray);
  61. merTime = time(0) - merStartTime;
  62. std::cout << "merge sort comparison counter: " << *mergeReturnArray << std::endl;
  63. std::cout << "merge sort memory access counter: " << *(mergeReturnArray + 1) << std::endl;
  64. std::cout << "wallclock time for merge sort: " << merTime << std::endl;
  65. // Add the merge sort data to the CSV file line
  66. theFile << merTime << "," << *mergeReturnArray << "," << *(mergeReturnArray + 1) << "," ;
  67. quickStartTime = time(0);
  68. quickReturnArray = QuickSort(sampleArray);
  69. quickTime = time(0) - quickStartTime;
  70. std::cout << "quick sort comparison counter: " << *quickReturnArray << std::endl;
  71. std::cout << "quick sort memory access counter: " << *(quickReturnArray + 1) << std::endl;
  72. std::cout << "wallclock time for quick sort: " << quickTime << std::endl;
  73. std::cout << std::endl;
  74. // Add the quick sort data to the CSV file line
  75. theFile << quickTime << "," << *quickReturnArray << "," << *(quickReturnArray + 1) << "," ;
  76. theFile << "\n";
  77. // clear the array for the next sample
  78. sampleArray -> clear();
  79. }
  80. }
  81. // check to see if I'm getting all the sample elements in one array
  82. /*for (auto const &element: *sampleArray){
  83. std::cout << element << ' ' << std::endl;
  84. }*/
  85. theFile.close(); // close CSV file
  86. file.close(); // close JSON file
  87. return 0;
  88. }