void merge(int n[], int left, int mid, int right)
{
int num = right - left;
int *tmp = new int[num];
int iw = 0;
int il = left;
int ir = mid;
while (il < mid && ir < right)
{
if (n[il] <= n[ir])
{
tmp[iw++] = n[il++];
} else {
tmp[iw++] = n[ir++];
}
}
while (il < mid) tmp[iw++] = n[il++];
while (ir < right) tmp[iw++] = n[ir++];
for (int i=0; i<num; i++) n[left + i] = tmp[i];
delete[] tmp;
}
void merge_sort_sub(int n[], int left, int right)
{
if (right - left <= 1) return;
int mid = left + (right - left) / 2;
merge_sort_sub(n, left, mid);
merge_sort_sub(n, mid, right);
merge(n, left, mid, right);
}
void merge_sort(int n[], int len)
{
merge_sort_sub(n, 0, len);
}
More than 5 years have passed since last update.
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme
List of users who liked
12