两种外排序的思路sorting by merging&sorting by distribution

本文通过一个具体案例,对比分析了归并排序与桶排序在外排序场景下的应用特点及各自的优势。针对磁盘上的16个数字,内存仅能容纳4个数进行排序的情况,详细阐述了两种排序方法的具体步骤,并探讨了多核环境下排序算法的优化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很早以前我写过一篇博客推荐过一本书《Algorithms and Data Structures for External Memory

http://blog.youkuaiyun.com/pennyliang/archive/2010/02/28/5334218.aspx

今天我思考了一个问题,顺便翻了翻,对外排序进行了些思考,分享如下:

假定在磁盘上有16个数字,而内存只能容下4个数进行排序,那么归并的排序和桶排序有怎样的区别呢?其实各有千秋。归并的排序无疑是最常用的,思想简单,但最后一步多路归发挥多核优势有困难,桶排序的方法充分发挥多核优势,难点在于如何让桶内distributing进来的关键字数量一致,详细可参考我曾推荐的这本书。

为了便于理解我举了个例子:

input:1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output

sorting by merge

(1)分段 (2)内排序 3)多路归并(败者树)

1 4 2 8 1 2 4 8

12 11 3 6 3 6 11 12

9 40 28 279 27 28 40 1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

21 7 6 3 3 6 7 21

(1)其实是什么也不做

磁盘IO量0

input:1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output

(2)

磁盘IO量16*2=32字节(读16字节,写16字节)

input:1 2 4 8 3 6 11 12 9 27 28 40 3 6 7 21

output

(3)

磁盘IO量读16*2 = 32字节

input: 1 2 4 8 3 6 11 12 9 27 28 40 3 6 7 21

output1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

如果有4CPU,第一、二个阶段4CPU可以同时参与计算,第三阶段最多可有2CPU可参与计算,一个从output开头写,一个从output结尾写,两头往中间写,直到满。文件可以采用内存映射的方式,实现两头往中间写。

sorting by distribution

(1)分桶 (2)内排序(排序后,则按桶的顺序自然有序)

1 2 3 3 1 2 3 3

4 6 7 6 4 6 6 7

8 9 12 11 8 9 11 12

40 28 27 2121 27 28 40

(1)

磁盘IO量16*2 = 32字节

input: 1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output1 2 3 3 4 6 7 6 8 9 12 11 40 28 27 21

(2)

磁盘IO量16*2 = 32字节

input: 1 4 2 8 12 11 3 6 9 40 28 27 21 7 6 3

output1 2 3 3 4 6 6 7 8 9 11 12 21 27 28 40

如果有4CPU,第一、二个阶段4CPU可以同时参与计算。但难点是如何让每个桶的数均匀。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值