void mergearray(
int a[],
int first,
int mid,
int last,
int temp[])
{
int i = first, j = mid +
1;
int m = mid, n = last;
int k =
0;
while (i <= m && j <= n)
{
if (a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i =
0; i < k; i++)
a[first + i] = temp[i];
}
void mergesort(
int a[],
int first,
int last,
int temp[])
{
if (first < last)
{
int mid = (first + last) /
2;
mergesort(a, first, mid, temp);
mergesort(a, mid +
1, last, temp);
mergearray(a, first, mid, last, temp);
}
}
bool MergeSort(
int a[],
int n)
{
int *p =
new int[n];
if (p == NULL)
return false;
mergesort(a,
0, n -
1, p);
delete[] p;
return true;
}
转载请注明原文地址: https://ju.6miu.com/read-17772.html