【发布时间】:2021-11-26 20:41:42
【问题描述】:
我有一个逆分区算法
Reverse-Partition(A, p, q, r)
pivot = A[q]
j = r
i = q
while j ≥ p + 1 and i ≥ p
if A[j] > pivot
exchange A[j] with A[i]
i = i − 1
j = j − 1
我正在尝试编写一种比上述算法更快的算法以获得最佳运行时间
Fast-Reverse-Partition(A, p, q, r)
BEGIN:
For(int i = r; i > (r-q); i--):
swap A[i] and A[i-(r-q)]
END
在反向分区函数中,在给定的数组中,索引 q~r 中的所有元素都大于枢轴元素,索引 p~q 中的元素都小于枢轴,所以我认为使用以上一个我们可以获得相同的结果反向分区功能。
此函数的运行时间为 n = r-(r-q)+1 = q+1,因此它比反向分区函数更快。
这有意义吗?还是我的理解有误?
【问题讨论】:
-
在进行这样的工作时,最好设置一个测试框架,您可以在其中不断验证您的算法在您对其进行更改时是否仍能完成它应该做的事情。
标签: arrays algorithm sorting quicksort partition