考虑两个 k 位数(二进制表示):
$$A = A_1 A_2 A_3 A_4 ... A_k $$
$$B = B_1 B_2 B_3 B_4 ... B_k $$
为了比较,我们从左到右扫描寻找 a 的出现0
并检查相反的数字,如果该数字也是 a 0
(对于两个数字),请注意如果找到这样的情况,则 the 的来源0
小于 the 的来源1
. 但如果数字是:
111111111111
111111111110
显然,这将需要扫描整个数字,如果我们事先没有被告知数字并简单地给出它们,那么:
比较需要$O(k)$
时间。
因此,当我们查看诸如高性能快速排序之类的排序方法的代码时:
HPQuicksort(list): T(n)
check if list is sorted: if so return list
compute median: O(n) time (or technically: O(nk))
Create empty list $L_1$, $L_2$, and $L_3$ O(1) time
Scan through list O(n)
if element is less place into $L_1$ O(k)
if element is more place into $L_2$ O(k)
if element is equal place into $L_3$ O(k)
return concatenation of HP sorted $L_1$, $L_3$, $L_2$ 2 T(n/2)
因此:T(n) = O(n) + O(nk) + 2*T(n/2) ---> T(n) = O(nklog(n))
这意味着快速排序比基数排序慢。
那我们为什么还要使用它呢?