归并排序

                 归并排序

先来看看合并排序(分治法)

分别用两个新数组来存前后两部分,前提两个都是排好序的;

然后从两个数组中选出较小的,赋给原数组,较大的放回,然后循环就行了

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)/23        MERGE-SORT(A, p, q)
4        MERGE-SORT(A, q + 1, r)
5        MERGE(A, p, q, r)

排序过程如下

这个排序算法的时间复杂度为Θ(n lgn),是个很不错的算法

posted on 2012-09-24 22:51  即为将军  阅读(252)  评论(0)    收藏  举报

导航