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)
归并排序利用递归将一个大数组不断的从中间对半分成两个小的数组直到数组中只剩下一个元素,然后通过MERGE函数合并。
MERGE-SORT中A
是数组,p
是数组中需要比较的第一个元素的下标,r
是最后一个元素的下标。
if p<r
就是用来判断,数组区间长度是否大于1,否则直接返回
MERGE-SORT(A,p,q)
q
是区间中间元素的下标,将分开后的区间右边部分用MERGE-SORT函数处理(也就是继续分割为两半,直到区间只剩下一个元素)。下一个语句是处理左半边。
当这两个函数返回后,由他们处理的区间都已经按顺序排列
(只有一个元素的数列当然是已经排好序的),MERGE函数做的只是间这两个区间合并。
MERGE(A,p,q,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]=∞
R[n