《大话数据结构》里边的归并排序存在bug,这是修改之后的,已亲测
#include<bits/stdc++.h>
using namespace std;
void Print_arr(int *p,int len)
{
for (int i = 0; i < len; i++)
cout << p[i] << " ";
cout << endl;
}
void Sort(int *s,int i,int m,int n)
{
int *d = (int *)malloc((n - i + 1)*sizeof(int));
int j, k;
int l = 0;
for (j = i, k = m + 1; j <= m && k <= n; l++)
{
if (s[j] < s[k])
d[l] = s[j++];
else
d[l] = s[k++];
}
if (j <= m)
{
for (int x = 0; x <= m - j; x++)
d[l++] = s[j + x];
}
if (k <= n)
{
for (int x = 0; x <= n - k; x++)
d[l++] = s[k + x];
}
memcpy(s + i, d, (n - i + 1) * sizeof(int));
free(d);
}
void MergeSort(int *s, int *t,const int i,const int n)
{
if (i == n)
{
t[i] = s[i];
}
else
{
int middle = (i + n) / 2;
MergeSort(s, t, i, middle);
MergeSort(s, t, middle + 1, n);
Sort(t,i,middle,n);
}
}
int main()
{
int a[] = { 50,10,90,30,70,40,80,60,20 };
int dst[9];
MergeSort(a, dst, 0, 8);
cout <<"rel:" <<endl;
Print_arr(dst,sizeof(dst)/sizeof(int));
system("pause");
return 0;
}