在学习和写c语言归并排序的时候发生的错误 ,希望=纠错
#include
#define MAXSIZE 50
typedef int ElemType;
typedef struct Sqlist
{
ElemType data[MAXSIZE];
int length;
int r;
}Sqlist;
void Merge(int SR[], int TR[], int i, int m, int n)
{
int j, k, l;
for (j = m + 1, k = i; i <= m && j <= n; k++)
{
if (SR[i] < SR[j])
{
TR[k] = SR[j++];
}
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];
}
}
}
void MergePass(int SR[], int TR[], int s, int n)
{//<-在此处的大括号标红色波浪线//将SR[]中相邻长度为s的子序列两两归并到TR[]
int i = 1;
int j;
while (i <= n - 2 * s + 1)//两两归并
{
Merge(SR, TR, i, i + s - 1, i + 2 * s - 1);
i = i + 2 * s;
}
if (i < n - s + 1) //归并最后两个序列
Merge(SR, TR, i, i + s - 1, n);
else
{//若最后只剩下单个子序列
for (j = i; j <= n; j++)
{
TR[j] = SR[j];
}
}
}
int MergeSort(Sqlist * L)
{
int* TR = (int*)malloc(L->length * sizeof(int));
int k = 1;
while (k < L->length)
{
MergePass(L->r, TR, k, L->length);
k = 2 * k;
MergePass(TR, L->r, k, L->length);
k = 2 * k;
}
}
int main()
{
int A[] = { 5,8,9,10,78,7,21,12,1,5,6 };
int ret = sizeof(A) / sizeof(A[0]);
struct Sqlist B = { A,ret,1 };
MergeSort(A);
}
Merge函数显然最后少了一个大括号啊。