设计排序功能

时间:2014-02-05 14:32:26

标签: algorithm sorting

我正在阅读Engineering a Sort Function(pg-1254),其中JON L. BENTLEY& M. DOUGLAS McILROY讨论了两种成本模型

  

MIX:overhead = comparearisons<互换

     

qsort:开销<交换<比较

(page no-1254 of Engineering a Sort Function)

任何人都可以解释为什么除了字符串情况之外,为什么比较在第二个模型中成本太高? 如果比较真的太昂贵,那么为什么我们不使用“自下而上的堆”?

根据维基百科,

It is a variant of Heapsort which is particularly suitable for the sorting of very large amounts of data, if a relatively high cost per compare operation is needed and on average better than Quicksort

2 个答案:

答案 0 :(得分:0)

比较费用昂贵的原因在下一句话中:

  

第二个模型反映了qsort接口的一般性,其中比较是a   功能,而不是机器原语。

字符串也是如此。事实上,对于字符串尤其如此,因为比较两个字符串涉及函数调用,指针间接(再见引用的局部性)和走两个字符串,做min( m n < / em>)字节比较,其中 m n 是字符串的长度。

  

如果比较真的太贵了,为什么我们不使用“自下而上”?

你应该问作者。

答案 1 :(得分:0)

当间接访问密钥(通过指针数组或类似代码)时,交换的成本与参考信息的大小有关;比较的成本总是与密钥的大小有关。因此,交换的成本可以忽略不计。