外存排序算法中的快速排序(一)

外存快速排序是指外存多路快速排序,与内存快速排序思想一样,找一个分点把数据分成两半,小元素在分点前,大元素在分点后,分别快排递归。

对于外排序算法,数组不是划分成两半,而是根据外存算法的特点划分成多个部分。其思想是,对未排序的列表使用小于M/B个分割元素,通过扫描一次I/O实现划分,然后对划分的每一块进行递归划分,直到最后的划分能存进内存为止。

外存多路快速排序算法描述

    选择出k个分割点;                                                           

    将数组A的所有元素按照分割点进行分组;                         

    将分组完的块输出到对应外存中;                                     

    for A的每一个分组A, do                                                   

        if 第i个分组中的磁盘快数大于内存可以容纳的快数  then

            Multi_sort(A, i);                                                        

       else                                                                               

            将第i个分组放入内存进行内存排序;                         

       end if;                                                                           

外存多路快速排序算法I/O复杂度分析

外存快速排序的I/O复杂度是O(N/B * logM/BN/B)

(1).每一轮的I/O复杂度。包括

  • 输入一个缓冲区

  • 输入缓冲区中读入一个磁盘块

  • 磁盘块相应数字写入内存中对应缓冲区

  • 缓冲区满时,数字输出到外存

  • 每个数据块一进一出,I/O次数是O(N/B)

(2).一共有多少轮?(假设每轮划分是均匀,N不断被分成M/B-1组)

在第一轮中,输入分成了M/B - 1组(留一个磁盘块作为输入缓冲),每组M/B-1个元素。

第二轮划分,每组元素有N/(M/B-1)^2个,如果每组都放不进内存;则进行下一次划分

......             .......

直到第k轮,每组元素有N/(M/B-1)^k个,可以放入内存,则N/(M/B-1)^k == M.

由此得到,k = logM/B-1N/M = O(logM/BN/M)。

经上述分析,每轮排序的I/O复杂度是O(N/B),一共O(logM/BN/M)轮,外存排序的I/O复杂度是O(N/B * logM/BN/M)或O(N/B * logM/BN/B)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值