void Msort(ElemType A[], ElemType *tmpA, int st, int n, int N)
{
if (st >= n)
return;//终止条件
int mid = st + (n - st) / 2;
Msort(A, tmpA, st, mid, N);
Msort(A, tmpA, mid + 1, n, N);
//将分段有序的两子列归并
int t = st;
int i = st, j = mid + 1;
for (; i <= mid && j <= n;)
{
if (A[i] < A[j])
tmpA[t++] = A[i++];
else
tmpA[t++] = A[j++];
}
while (i <= mid)
tmpA[t++] = A[i++];
while (j <= n)
tmpA[t++] = A[j++];
for (i = st; i <= n; i++)
{
A[i] = tmpA[i];
}
}
void MergeSort(ElemType A[], int N)
{
ElemType *tmpA = (ElemType *)malloc(sizeof(ElemType) * N);
if (tmpA)
Msort(A, tmpA, 0, N - 1, N);
else
exit(0);
for (int i = 0; i < N; i++)
{/*打印结果*/
cout << A[i] << " ";
}
cout << endl;
}
List creatlist(int n=0)
{
List l = (List)malloc(sizeof(List));
l->next = NULL;
l->e = n;
return l;
}
十大排序算法之——归并排序
最新推荐文章于 2024-04-25 23:38:02 发布