zoukankan      html  css  js  c++  java
  • 经典排序算法 Flash Sort

    经典排序算法 - Flash Sort

    FlashSort依然类似桶排,主要改进了对要使用的桶的预测,或者说,减少了无用桶的数量从而节省了空间,例如

    待排数字[ 6 2 4 1 5 9 100 ]桶排需要100个桶,而flash sort则由于可以预测桶则只需要7个桶

    即待排数组长度个桶,如何预测将要使用的桶有这么一个公式

    flashsort

    该排序有前置条件,需要知道待排数组的区间和待排数组的长度,

    例如已知待排数组[ 6 2 4 1 5 9 ]的长度为6,最大值9,最小值1,这三个是已知条件,如果无法知道这三个则无法应用该排序

    预测的思想

    如果有这样一个待排数组,其最大值是100,最小值是1,数组长度为100,那么50在排完序后极有可能出现在正中间,flash sort就是基于这个思路

    预测桶号细节

    待排数组[ 6 2 4 1 5 9 ]

    具体看6可能出现的桶号

    Ai - Amin 是 6 - 1 = 5

    Amax - Amin 是9 - 1 = 8

    m - 1 是数组长度6 - 1 = 5

    则(m - 1) * (Ai - Amin) / (Amax - Amin) = 5 * 5 / 8 =25/8 = 3.125

    最后加上1等于 4.125

    6预测的桶号为4.125

    2预测的桶号为1.625

    4预测的桶号为2.875

    1预测的桶号为1

    5预测的桶号为3.5

    9预测的桶号为5

    去掉小数位后,每个数字都拥有自己预测的桶号,对应如下所示

    待排数组[ 6 2 4 1 5 9 ]

    预测桶号[ 4 1 2 1 3 5 ]

    入桶规则

    1号桶 2,1

    2号桶 4

    3号桶 5

    4号桶 6

    5号桶 9

    1号桶内两个数字使用任意排序算法使之有序,其它桶如果此种情况同样需要在桶内排序,使用什么排序算法不重要,重要的是排成从小到大即可

    最后顺序从桶里取出来即可

    [1 2 4 5 6 9]

    参考http://en.wikipedia.org/wiki/Flashsort

    返回主目录 [经典排序算法][集锦]



    ------------------------------------------
    除非特别声明,文章均为原创,版权与博客园共有,转载请保留出处
    BUY ME COFFEE
  • 相关阅读:
    PythonStudy——greenlet 协程
    PythonStudy——事件 Event
    PythonStudy——单线程并发的实现
    2015年的总结
    kylin一种OLAP的实现
    分布式消息队列的使用kakfa
    第一次听到了docker
    Hive分布式的数据仓库
    dubbo服务框架学习
    Storm实时计算框架的编程模式
  • 原文地址:https://www.cnblogs.com/kkun/p/2261529.html
Copyright © 2011-2022 走看看