MERGE(A, p, q, r)://p到q为有序的左半部分,q+1到r为有序的右半部分 n1 = q - p + 1 //左半部分元素个数 n2 = r - q //右半部分元素个数 let L[1..n1+1] and R[1..n2+1] be new arrays for i = 1 to n1 L[i] = A[p+i-1] //提取左半部分存入 for j = 1 to n2 R[j] = A[q+j] //提取右半部分存入 L[n1+1] = INF //为后面归并排序的递归出口做准备 R[n2+1] = INF i = 1 j = 1 for k = p to r //将左半部分和右半部分合并 if L[i] <= R[j] A[k] = L[i] i = i + 1 else A[k] = R[j] j = j + 1
1 2 3 4 5 6
MERGE-SORT(A, p, r): if p < r q = (p + r) / 2 MERGE-SORT(A, p, q) //排左半部分 MERGE-SORT(A, q+1, r) //排右半部分 MERGE(A, p, q, r) //将左半部分和右半部分合并