归并排序
归并排序
先来看看合并排序(分治法)
分别用两个新数组来存前后两部分,前提两个都是排好序的;
然后从两个数组中选出较小的,赋给原数组,较大的放回,然后循环就行了
MERGE(A, p, q, r) 1 n1 ← q - p + 1 2 n2 ← r - q 3 create arrays L[1 ‥ n1 + 1] and R[1 ‥ n2 + 1] 4 for i ← 1 to n1 5 do L[i] ← A[p + i - 1] 6 for j ← 1 to n2 7 do R[j] ← A[q + j] 8 L[n1 + 1] ← ∞ 9 R[n2 + 1] ← ∞ 10 i ← 1 11 j ← 1 12 for k ← p to r 13 do if L[i] ≤ R[j] 14 then A[k] ← L[i] 15 i ← i + 1 16 else A[k] ← R[j] 17 j ← j + 1

而归并排序需要用到合并排序的函数
先对前后两部分排序,再调用MERGE函数
MERGE-SORT(A, p, r) 1 if p < r 2 then q ← ⌊(p + r)/2⌋ 3 MERGE-SORT(A, p, q) 4 MERGE-SORT(A, q + 1, r) 5 MERGE(A, p, q, r)
排序过程如下

这个排序算法的时间复杂度为Θ(n lgn),是个很不错的算法
浙公网安备 33010602011771号