原理就不说了,大家都知道
直接贴代码
#include <iostream>
#include <new>
using namespace std;
void Merge(int *a, int l, int q, int r)
{
int x = q - l + 1, y = r - q;
int i = 0, j = 0, k = l;
int* b = new int[x];
int* c = new int[y];
for (i; i < x; i++)
{
b[i] = a[l+i];
}
for (j;j<y;++j)
{
c[j] = a[q+1+j];
}
i = 0, j = 0, k = l;
while (i < x && j < y)
{
if (b[i] < c[j])
{
a[k] = b[i];
i++;
}
else
{
a[k] = c[j];
j++;
}
k++;
}
if (i == x) //判断c数组是否还有剩余
{
if (j < y)
{
while (j < y)
a[k++] = c[j++];
}
}
if (j == y) //判断b数组是否还有剩余
{
if (i < x)
{
while (i < x)
a[k++] = b[i++];
}
}
delete b;
delete c;
}
void Merge_sort(int *a, int l, int r)
{
if (r>l)
{
int q =(l + r) / 2;
Merge_sort(a, l, q);
Merge_sort(a, q + 1, r);
Merge(a, l, q, r);
}
else
return;
}
int main(int argc, char** argv)
{
int a[10] = { 2,5,4,6,8,1,3,7,9,0 };
Merge_sort(a, 0, 9);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
return 0;
}