一叠有编号的纸需要从小到大排序,用哪一种方法最快

O(nlogn)以下的排序无非就是基数排序、桶排序、排序网络桶排序就是你说的,先按一定范围分成堆,没堆数量很少然后随意插入排序一下,最后再按顺序把每一堆合起来,其实我们理扑克牌就是这么理的基数排序是把这个顺序反过来,先按个位数理成十堆,从小到大合起来,再按十位数理成十堆,再合起来,直到最高位。由于数字相同的会保持上一次的顺序,因此最后就是整体排好序的了。排序网络是利用并行的原理进行的,这个讲起来就很复杂了,而且没有实际可操作性,不过理论上只需要O(log^2n)就够了。一种简单的退化情形是,先叫尽量多的同学来,一人拿一张纸,然后一声令下,两人一组开始比较手中的纸的大小,把纸按从小到大排起来,然后一个人拿着合并后的纸另一个人离开,然后再次两人一组,由于手里的都是合并好的,只要进行归并操作就行了:每次从顶上取走较小的一个直到全部取完。这两不断两两合并,最后就能得到排好序的纸堆,因为每个步骤都是并行进行的,最终时间复杂度是O(n)。然而这并不是效率最高的方法,因为合并也可以并行进行,方法大概如下图所示: 【一叠有编号的纸需要从小到大排序,用哪一种方法最快】 一叠有编号的纸需要从小到大排序,用哪一种方法最快

合并时,将第一堆的第一张与第二堆的最后一张,第一堆的第二张与第二堆的倒数第二张同时进行比较,如果第一堆的比第二堆的大则交换。之后对每一堆进行一个被成为双调排序的过程。具体的原理可以参考这篇文章 http://wenku.baidu.com/link?url=UNgdAS0IILH2mYAZ8VjeNnvsz7M98AVCH6eoDLQp1_h5EonUPUgYDTKZZ-K6MezU-NM8n7Krdph9ci_1a7I3vJOWHgfoapAI51EeSIhq2ZW
■网友
桶排和分治都是不错的选择,不过多嘴问一句,玩过斗地主吗?
■网友
谢邀。排序算法没有哪种最快的问题。只有哪种算法对于哪种输入分布最适合的问题。那么请问输入的概率分布如何?


    推荐阅读