Skip to content

Latest commit

 

History

History
54 lines (52 loc) · 1008 Bytes

MergeSort.md

File metadata and controls

54 lines (52 loc) · 1008 Bytes

##Merge Sort Back

  • 歸併排序: 分治思想(Divide, Conquer and Combination)
  • Divide: 二分
  • Conquer: 直到只有一個的時候合併
  • Combination: 每次比較隊頭,較小的先放進隊列
  • 时间复杂度: (最好,平均,最壞情況)
  • 空間複雜度:
  • 稳定性: 稳定
  • 适用情况: 額外空間可以接受的情況下
void Merge(int A[], int p, int m, int q)
{
	int n1 = m - p + 1;
	int n2 = q - (m + 1) + 1;
	int L[MAXSIZE], R[MAXSIZE];				
	for (int i = 1; i <= n1; i++)
	{
		L[i] = A[p + i - 1];
	}
	for (int j = 1; j <= n2; j++)
	{
		R[j] = A[m + j];
	}
	L[n1 + 1] = INFINITY;
	R[n2 + 1] = INFINITY;
	int i = 1;
	int j = 1;
	for (int k = p; k <= q; k++)				
	{
		if (L[i] <= R[j])
		{
			A[k] = L[i];
			i++;
		}
		else
		{
			A[k] = R[j];
			j++;
		}
	}
}

void MergeSort(int A[], int p, int q)
{
	if (p < q)
	{
		int m = (p + q) / 2;
		MergeSort(A, p, m);
		MergeSort(A, m + 1, q);
		Merge(A, p, m, q);
	}
}