diff --git a/Makefile b/Makefile index 589b77f..3b3ec6b 100644 --- a/Makefile +++ b/Makefile @@ -8,3 +8,6 @@ compile: link: g++ -o bin/main.out build/*.o + +clean: + rm build/*.o bin/*.out test/OUTPUT/*.txt diff --git a/bin/main.out b/bin/main.out index 5b0e09c..458b47c 100755 Binary files a/bin/main.out and b/bin/main.out differ diff --git a/include/sorts.h b/include/sorts.h index 700e750..74d531a 100644 --- a/include/sorts.h +++ b/include/sorts.h @@ -24,8 +24,8 @@ public: void PrintToFile(std::string outputFilename); void InsertionSort(void); void MergeSort(void); - void __MergeSort__(void); - void __Merge__(void); + void __MergeSort__(int p, int r); + void __Merge__(int p, int q, int r); void HeapSort(void); }; diff --git a/src/sorts.cpp b/src/sorts.cpp index 899cee4..f4b524e 100644 --- a/src/sorts.cpp +++ b/src/sorts.cpp @@ -108,17 +108,50 @@ void Sorter::InsertionSort(void) void Sorter::MergeSort(void) { - ; + __MergeSort__(0, lineCount - 1); + return; } -void Sorter::__MergeSort__(void) +void Sorter::__MergeSort__(int p, int r) { - ; + if (p < r) + { + int q = (p + r) / 2; + __MergeSort__(p, q); + __MergeSort__(q+1, r); + __Merge__(p, q, r); + } + return; } -void Sorter::__Merge__(void) +void Sorter::__Merge__(int p, int q, int r) { - ; + int n1 = q - p + 1; + int n2 = r - q; + // L[i - 1] R[j - 1] + std::vector leftTmp; + std::vector rightTmp; + for (int i = 0; i < n1; i++) + leftTmp.push_back(newWordList[p + i]); + for (int i = 0; i < n2; i++) + rightTmp.push_back(newWordList[q + i + 1]); + leftTmp.push_back("ZZZZZ"); + rightTmp.push_back("ZZZZZ"); + int i = 0; + int j = 0; + for (int k = p; k <= r; k++) + { + if (leftTmp[i] <= rightTmp[j]) + { + newWordList[k] = leftTmp[i]; + i++; + } + else + { + newWordList[k] = rightTmp[j]; + j++; + } + } } void Sorter::HeapSort(void)