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