数组归并排序

时间:2021-01-20 04:13:56

A和B是两个有序数组(假设为递增序列),而且A的长度足以放下A和B中所有的元素, 写一个函数将数组B融入数组A,并使其有序。

void merge(int a[], int b[], int n, int m)
{
int k = m+n-1;
int p = n-1;
int q = m-1;
while (p >= 0 && q >= 0)
{
if (a[p] > b[q])
{
a[k--] = a[p--];
}
else
{
a[k--] = b[q--];
}
}

while (q >= 0)
{
a[k--] = b[q--];
}
}


对于数组A,它的前半段和后半段分别有序,不使用额外的空间怎么使A整体有序。

void merge(int a[], int begin, int mid, int end)
{
for (int i = begin; i <= mid; i++)
{
if (a[i] > a[mid+1])
{
swap(a[i], a[mid+1]);
for (int j = mid+1; j < end; j++)
{
if (a[j] <= a[j+1])
{
break;
}
swap(a[j], a[j+1]);
}
}
}
}