前言
mergesort核心思想特别简单,实现也不复杂。
这个人的mergesort相关写的特别好,如果你某一天失忆忘了mergesort的原理,可以来这里瞧瞧:失忆点这里
以下代码供参考
void sort(vector<int> &a)
{
if (a.empty() || a.size() == 1)return;
mergesort(a, 0, a.size() - 1);
}
void mergesort(vector<int> &a, int b, int e)
{
if (b >= e)return;
int m = b + (e - b) / 2;
mergesort(a, b, m);
mergesort(a, m + 1, e);
merge(a, b, e, m);
}
void merge(vector<int>& a, int b, int e, int m)
{
vector<int> t;
for (int i = b; i <= e; i++)t.push_back(a[i]);
int i = b; int j = m + 1; int r = b;
while (i <= m && j <= e)
{
if (t[i - b] >= t[j - b])
{
a[r] = t[i - b]; i++; r++;
}
else
{
a[r] = t[j - b]; j++; r++;
}
}
if (i <= m)
{
while (i <= m) { a[r] = t[i - b]; i++; r++; }
}
else
{
while (j <= e) { a[r] = t[j - b]; j++; r++; }
}
}