void Merge(int SR[], int TR[], int i, int m, int n);
void MergePass(int SR[], int TR[], int k, int n);
typedef struct
{
int length = 17;
int r[18];// = { 0,50,10,90,30,70,40,80,60,20 };
}Sqlist;
void Mergesort2(Sqlist* L)
{
int* TR = new int[L->length+1];
int k = 1;
while (k < L->length)
{
MergePass(L->r,TR,k,L->length);
k = k * 2;
MergePass(TR,L->r,k,L->length);
k = k * 2;
}
}
void MergePass(int SR[], int TR[], int k, int n)
{
int i = 1;
int j;
while (i <= n - 2 * k + 1) // 这个条件 2*k+1 是保证 还能有两个 序列用来归并
{
Merge(SR, TR, i, i + k - 1, i + 2 * k - 1); //两两归并
i = 2 * k + i;
}
if (i < n - k + 1)
Merge(SR, TR, i, i + k - 1, n);
else
for (j = i;j <= n; j++)
TR[j] = SR[j];
}
void Merge(int SR[], int TR[], int i, int m, int n)
{
int j, k, l;
for (j = m + 1, k = i;j <= n && i <= m; k++)
{
if (SR[i] < SR[j])
TR[k] = SR[i++];
else
TR[k] = SR[j++];
}
if (i <= m)
{
for (l = 0; l <= m - i;l++)
TR[k + l] = SR[i + l];
}
if (j <= n)
{
for (l = 0; l <= n - j;l++)
TR[k + l] = SR[j + l];
}
}
int main()
{
int a[10] = {0,50,10,90,30,70,40,80,60,20 };
Sqlist* l = new Sqlist;
l->r[0] = 0;
l->r[1] = 50;
l->r[2] = 10;
l->r[3] = 90;
l->r[4] = 30;
l->r[5] = 70;
l->r[6] = 40;
l->r[7] = 80;
l->r[8] = 60;
l->r[9] = 20;
l->r[10] = 5;
l->r[12] = 1;
l->r[13] = 9;
l->r[14] = 3;
l->r[15] = 7;
l->r[16] = 4;
l->r[17] = 8;
l->r[11] = 2;
//for (int i = 1;i < 18;i++)
//std::cout << l->r[i] << std::endl;
//l->r = a ;
Mergesort2(l);
for(int i =1;i<18;i++)
std::cout << l->r[i] << std::endl;
//delete l;
}