Finished Merge Sort
This commit is contained in:
parent
1ece4fc95a
commit
eb92287fab
3
Makefile
3
Makefile
@ -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
|
||||||
|
BIN
bin/main.out
BIN
bin/main.out
Binary file not shown.
@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user