Natalie Pueyo 8 лет назад
Родитель
Сommit
16aae392df
6 измененных файлов с 28 добавлено и 22 удалено
  1. 4 4
      mergesort.cpp
  2. BIN
      mergesort.o
  3. BIN
      mergesort.o3
  4. 10 10
      timealgorithms.csv
  5. 14 8
      timealgorithms.cxx
  6. BIN
      timealgorithms.exe

+ 4 - 4
mergesort.cpp

@@ -12,9 +12,9 @@ int* MergeSort(std::vector<int>* numbers) {
   int comparisonCounter = 0;
   int memAccessCounter = 0;
   static int returnCounters[2];
+  std::cout << "new sample" << std::endl;
 
   MergeSortRecurse(numbers, 0, numbers->size() - 1, &comparisonCounter, &memAccessCounter);
-  memAccessCounter++;
 
   returnCounters[0] = comparisonCounter;
   returnCounters[1] = memAccessCounter;
@@ -23,6 +23,7 @@ int* MergeSort(std::vector<int>* numbers) {
 
 
 void MergeSortRecurse(std::vector<int>* numbers, int i, int k, int *comparisonCounter, int *memAccessCounter) {
+   *memAccessCounter = *memAccessCounter + 1;
    int j = 0;
 
    if (i < k) {
@@ -54,9 +55,9 @@ void Merge(std::vector<int>* numbers, int i, int j, int k, int *comparisonCounte
 
    // Add smallest element from left or right partition to merged numbers
    while (leftPos <= j && rightPos <= k) {
+      *comparisonCounter = *comparisonCounter + 1;
+      *memAccessCounter = *memAccessCounter + 2;
       if ((*numbers)[leftPos] < (*numbers)[rightPos]) {
-        *comparisonCounter = *comparisonCounter + 1;
-        *memAccessCounter = *memAccessCounter + 2;
          mergedNumbers[mergePos] = (*numbers)[leftPos];
          *memAccessCounter = *memAccessCounter + 1;
          ++leftPos;
@@ -65,7 +66,6 @@ void Merge(std::vector<int>* numbers, int i, int j, int k, int *comparisonCounte
          mergedNumbers[mergePos] = (*numbers)[rightPos];
          *memAccessCounter = *memAccessCounter + 1;
          ++rightPos;
-
       }
       ++mergePos;
    }



+ 10 - 10
timealgorithms.csv

@@ -1,11 +1,11 @@
 Sample,InsertionSortTime,InsertionSortCompares,InsertionSortMemaccess,MergeSortTime,MergeSortCompares,MergeSortMemaccess,QuickSortTime,QuickSortCompares,QuickSortMemaccess
-Sample01,0,28,132,0,19,134,0,25,34
-Sample02,0,37,186,0,19,134,0,25,34
-Sample03,0,17,66,0,19,134,0,25,34
-Sample04,0,23,102,0,19,134,0,25,34
-Sample05,0,27,126,0,19,134,0,25,34
-Sample06,0,39,198,0,19,134,0,25,34
-Sample07,0,20,84,0,19,134,0,25,34
-Sample08,0,27,126,0,19,134,0,25,34
-Sample09,0,33,162,0,19,134,0,25,34
-Sample10,0,32,156,0,19,134,0,25,34
+Sample01,0,28,132,0,24,162,0,14,59
+Sample02,0,37,186,0,23,160,0,15,64
+Sample03,0,17,66,0,23,160,0,18,51
+Sample04,0,23,102,0,24,162,0,25,58
+Sample05,0,27,126,0,23,160,0,15,56
+Sample06,0,39,198,0,22,158,0,15,64
+Sample07,0,20,84,0,21,156,0,21,50
+Sample08,0,27,126,0,23,160,0,16,65
+Sample09,0,33,162,0,21,156,0,18,59
+Sample10,0,32,156,0,23,160,0,13,58

+ 14 - 8
timealgorithms.cxx

@@ -26,9 +26,11 @@ int main(int argc, char* argv[]) {
   theFile.open("timealgorithms.csv");
   theFile << "Sample,InsertionSortTime,InsertionSortCompares,InsertionSortMemaccess,MergeSortTime,MergeSortCompares,MergeSortMemaccess,QuickSortTime,QuickSortCompares,QuickSortMemaccess\n";
 
-  // initialize array for JSON data
-  //int n = jsonObject["metadata"]["arraySize"];
-  std::vector<int>* sampleArray = new std::vector<int>();
+  // initialize arrays for JSON data
+  // each should have it's own copy cause the array get's sorted within each function
+  std::vector<int>* insArray = new std::vector<int>();
+  std::vector<int>* merArray = new std::vector<int>();
+  std::vector<int>* quickArray = new std::vector<int>();
 
   // initialize insertion sort variables
   int *insReturnArray;
@@ -50,14 +52,16 @@ int main(int argc, char* argv[]) {
 
     if (sampleName != "metadata") {
       for (auto arrayItr = jsonObject[sampleName].begin(); arrayItr != jsonObject[sampleName].end(); ++arrayItr) {
-        sampleArray -> push_back(*arrayItr);
+        insArray -> push_back(*arrayItr);
+        merArray -> push_back(*arrayItr);
+        quickArray -> push_back(*arrayItr);
       }
       // Add the sample name to the CSV file line
       theFile << itr.key() << ",";
 
       // insertion sort evaluation
       insStartTime = time(0);
-      insReturnArray = InsertionSort(sampleArray);
+      insReturnArray = InsertionSort(insArray);
       insTime = time(0) - insStartTime;
       std::cout << "insertion sort comparison counter: " << *insReturnArray << std::endl;
       std::cout << "insertion sort memory access counter: " << *(insReturnArray + 1) << std::endl;
@@ -67,7 +71,7 @@ int main(int argc, char* argv[]) {
 
       // merge sort evaluation
       merStartTime = time(0);
-      mergeReturnArray = MergeSort(sampleArray);
+      mergeReturnArray = MergeSort(merArray);
       merTime = time(0) - merStartTime;
       std::cout << "merge sort comparison counter: " << *mergeReturnArray << std::endl;
       std::cout << "merge sort memory access counter: " << *(mergeReturnArray + 1) << std::endl;
@@ -77,7 +81,7 @@ int main(int argc, char* argv[]) {
 
       // quick sort evaluation
       quickStartTime = time(0);
-      quickReturnArray = QuickSort(sampleArray);
+      quickReturnArray = QuickSort(quickArray);
       quickTime = time(0) - quickStartTime;
       std::cout << "quick sort comparison counter: " << *quickReturnArray << std::endl;
       std::cout << "quick sort memory access counter: " << *(quickReturnArray + 1) << std::endl;
@@ -88,7 +92,9 @@ int main(int argc, char* argv[]) {
       theFile << "\n";
 
       // clear the array for the next sample
-      sampleArray -> clear();
+      insArray -> clear();
+      merArray -> clear();
+      quickArray -> clear();
     }
   }
 

BIN
timealgorithms.exe