【发布时间】:2019-04-01 17:36:50
【问题描述】:
我正在讨论快速排序的实现(来自 CLRS 第 3 版)。我发现数组的递归除法从低索引到中间1,然后再从中间+1到高。
QUICKSORT(A,p,r)
1 if(p < r)
2 q = PARTITION(A,p,r)
3 QUICKSORT(A,p,q-1)
4 QUICKSORT(A,q+1,r)
并给出归并排序的实现如下:
MERGE-SORT(A,p,r)
1 if(p < r)
2 q = (p+r)/2 (floor)
3 MERGE-SORT(A,p,q)
4 MERGE-SORT(A,q+1,r)
5 MERGE(A,p,q,r)
既然他们都使用了相同的划分策略,为什么快速排序忽略中间元素,因为从0 到q-1 和q+1 到r 没有包含q而mergesort有?
【问题讨论】:
-
分区步骤将主元置于
q,因此该值位于数组中的最终位置。 -
注意这取决于分区算法。 Lomuto 不包括枢轴,而Hoare 包括其中一个分区中的枢轴。 Hoare - youtube 的变体不会移动枢轴或任何等于枢轴值的值。
标签: algorithm sorting quicksort mergesort