Finished Merge Sort

This commit is contained in:
TriantaTV 2023-01-19 13:04:06 -06:00
parent 1ece4fc95a
commit eb92287fab
4 changed files with 43 additions and 7 deletions

View File

@ -8,3 +8,6 @@ compile:
link: link:
g++ -o bin/main.out build/*.o g++ -o bin/main.out build/*.o
clean:
rm build/*.o bin/*.out test/OUTPUT/*.txt

Binary file not shown.

View File

@ -24,8 +24,8 @@ public:
void PrintToFile(std::string outputFilename); void PrintToFile(std::string outputFilename);
void InsertionSort(void); void InsertionSort(void);
void MergeSort(void); void MergeSort(void);
void __MergeSort__(void); void __MergeSort__(int p, int r);
void __Merge__(void); void __Merge__(int p, int q, int r);
void HeapSort(void); void HeapSort(void);
}; };

View File

@ -108,17 +108,50 @@ void Sorter::InsertionSort(void)
void Sorter::MergeSort(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<std::string> leftTmp;
std::vector<std::string> 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) void Sorter::HeapSort(void)