#include <stdio.h>
void mergeSort(int A[], int len);
void show(int A[], int len);
int main()
{
int A[] = {1, 3, 2, 5, 7};
int len = 5;
mergeSort(A, 5);
show(A, 5);
return 0;
}
// A[p..q]和A[q+1..r]是已排序数组,该函数实现A[p..r]排序
void merge(int A[], int p, int q, int r)
{
int *S = new int[r-p+1];
int i = p;
int j = q + 1;
int k = 0;
while (i <= q && j <= r)
if (A[i] <= A[j])
S[k++] = A[i++];
else S[k++] = A[j++];
while (i <= q)
S[k++] = A[i++];
while (j <= r)
S[k++] = A[j++];
for (i=0; i<k; ++i)
A[p++] = S[i];
delete []S;
return ;
}
void mergeSort(int A[], int p, int r)
{
if (r > p)
{
int q = (p + r) / 2;
mergeSort(A, p, q);
mergeSort(A, q + 1, r);
merge(A, p, q, r);
}
return ;
}
void mergeSort(int A[], int len)
{
mergeSort(A, 0, len-1);
return ;
}
void show(int A[], int len)
{
for (int i=0; i<len; ++i)
printf("%d/n", A[i]);
return ;
}