
排序算法
|
81
排序算法
sort (A)
if A has less than 2 elements then
return A
else if A has 2 elements then
swap elements of A if out of order
return A
sub1 = sort(left half of A)
sub2 = sort(right half of A)
merge sub1 and sub2 into new array B
return B
end
每次递归调用
sort
都需要等同于数组大小即
O
(
n
)
的空间,而这样的递归调用次数为
O
(log
n
)
,因此这种实现所需的存储空间为
O
(
n
log
n
)
。所幸的是,有一种方法只需要使
用
O
(
n
)
的存储,现在就让我们来看一看。
4.8.2 输入 / 输出
sort
的输出结果借用了原始集合
A
,因此不需要使用内部的存储
备份
。
归并排序算法小结
最好情况、平均情况和最坏情况:
O
(
n
log
n
)
sort (A)
copy = copy of A
❶
mergeSort (copy, A, 0, n)
end
mergeSort (A, result, start, end)
❷
if end - start < 2 then return
if end - start = 2 then
swap elements of result if out of order
return ...