Natalie Pueyo 8 лет назад
Родитель
Сommit
26973388f6
5 измененных файлов с 13 добавлено и 19 удалено
  1. 11 17
      mergesort.cpp
  2. 2 2
      mergesort.h
  3. BIN
      mergesort.o
  4. BIN
      mergesort.o3
  5. BIN
      timealgorithms.exe

+ 11 - 17
mergesort.cpp

@@ -21,22 +21,22 @@ int* MergeSort(std::vector<int>* numbers) {
 }
 
 
-void MergeSortRecurse(std::vector<int>* numbers, int i, int k, int* comparisonCounterPointer, int* memAccessCounterPointer) {
+void MergeSortRecurse(std::vector<int>* numbers, int i, int k, int *comparisonCounter, int *memAccessCounter) {
    int j = 0;
 
    if (i < k) {
       j = (i + k) / 2;  // Find the midpoint in the partition
 
       // Recursively sort left and right partitions
-      MergeSortRecurse(numbers, i, j, comparisonCounterPointer, memAccessCounterPointer);
-      MergeSortRecurse(numbers, j + 1, k, comparisonCounterPointer, memAccessCounterPointer);
+      MergeSortRecurse(numbers, i, j, comparisonCounter, memAccessCounter);
+      MergeSortRecurse(numbers, j + 1, k, comparisonCounter, memAccessCounter);
 
       // Merge left and right partition in sorted order
-      Merge(numbers, i, j, k, comparisonCounterPointer, memAccessCounterPointer);
+      Merge(numbers, i, j, k, comparisonCounter, memAccessCounter);
    }
 }
 
-void Merge(std::vector<int>* numbers, int i, int j, int k, int* comparisonCounter, int* memAccessCounter) {
+void Merge(std::vector<int>* numbers, int i, int j, int k, int *comparisonCounter, int *memAccessCounter) {
    int mergedSize = k - i + 1;                // Size of merged partition
    int mergePos = 0;                          // Position to insert merged number
    int leftPos = 0;                           // Position of elements in left partition
@@ -51,18 +51,15 @@ 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) {
       if ((*numbers)[leftPos] < (*numbers)[rightPos]) {
-        *comparisonCounter++;
+        *comparisonCounter = *comparisonCounter + 1;
         *memAccessCounter = *memAccessCounter + 2;
-        //std::cout << ".." << std::endl;
          mergedNumbers[mergePos] = (*numbers)[leftPos];
-         *memAccessCounter++;
-         //std::cout << "." << std::endl;
+         *memAccessCounter = *memAccessCounter + 1;
          ++leftPos;
       }
       else {
          mergedNumbers[mergePos] = (*numbers)[rightPos];
-         *memAccessCounter++;
-         //std::cout << "." << std::endl;
+         *memAccessCounter = *memAccessCounter + 1;
          ++rightPos;
 
       }
@@ -72,8 +69,7 @@ void Merge(std::vector<int>* numbers, int i, int j, int k, int* comparisonCounte
    // If left partition is not empty, add remaining elements to merged numbers
    while (leftPos <= j) {
       mergedNumbers[mergePos] = (*numbers)[leftPos];
-      *memAccessCounter++;
-      //std::cout << "." << std::endl;
+      *memAccessCounter = *memAccessCounter + 1;
       ++leftPos;
       ++mergePos;
    }
@@ -81,8 +77,7 @@ void Merge(std::vector<int>* numbers, int i, int j, int k, int* comparisonCounte
    // If right partition is not empty, add remaining elements to merged numbers
    while (rightPos <= k) {
       mergedNumbers[mergePos] = (*numbers)[rightPos];
-      *memAccessCounter++;
-      //std::cout << "." << std::endl;
+      *memAccessCounter = *memAccessCounter + 1;
       ++rightPos;
       ++mergePos;
    }
@@ -90,7 +85,6 @@ void Merge(std::vector<int>* numbers, int i, int j, int k, int* comparisonCounte
    // Copy merge number back to numbers
    for (mergePos = 0; mergePos < mergedSize; ++mergePos) {
       (*numbers)[i + mergePos] = mergedNumbers[mergePos];
-      *memAccessCounter++;
-      //std::cout << "." << std::endl;
+      *memAccessCounter = *memAccessCounter + 1;
    }
 }

+ 2 - 2
mergesort.h

@@ -11,7 +11,7 @@
 #include <vector>
 
 int* MergeSort(std::vector<int>* numbers);
-void MergeSortRecurse(std::vector<int>* numbers, int i, int k, int* comparisonCounter, int* memAccessCounter);
-void Merge(std::vector<int>* numbers, int i, int j, int k, int* comparisonCounter, int* memAccessCounter);
+void MergeSortRecurse(std::vector<int>* numbers, int i, int k, int *comparisonCounter, int *memAccessCounter);
+void Merge(std::vector<int>* numbers, int i, int j, int k, int *comparisonCounter, int *memAccessCounter);
 
 #endif



BIN
timealgorithms.exe