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

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

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

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

例如已知待排数组[ 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

经典排序算法(十九)--Flash Sort相关推荐

  1. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  2. 排序 时间倒序_经典排序算法之冒泡排序(Bubble Sort)

    冒泡排序 ( Bubble Sort ) 冒泡排序,正如它的名字一样,未排序数组中的最大(小)值会依次往上浮.冒泡排序主要有两个基本步骤:相邻元素之间的比较 和 交换位置. 步骤分析: 令待排序序列为 ...

  3. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  4. 十大经典排序算法-桶排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  6. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  7. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  8. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 十大经典排序算法-冒泡排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  10. js【详解】arr.sort()数组排序(内含十大经典排序算法的js实现)

    arr.sort()默认按照Unicode编码,从小到大进行排序,会改变原数组 let arr = ["e", "b", "d", &quo ...

最新文章

  1. 《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
  2. Location和Content-Location
  3. 源码时代php中级项目,PHP学科项目评比圆满结束
  4. php factory interface,PHP设计模式之工厂方法*解读
  5. DataQ数据对象为空的解决方法
  6. Excel转html
  7. 用包管理python代码,提高开发效率
  8. 单机版kubernetes1.13安装
  9. stm32学习笔记——外部中断的使用
  10. 【优化分配】基于matlab遗传算法求解医疗资源分配优化问题【含Matlab源码 1419期】
  11. flex与j2ee的结合(flex+Spring)
  12. Visual Studio添加图片资源到exe
  13. Shell脚本:Linux Shell脚本学习指南(超详细)
  14. NANK南卡降噪耳机和小米蓝牙耳机哪个好?谁更值得入手?
  15. matlab特定等值线,从Matlab轮廓函数中选择等值线
  16. C++三种继承方式--------私有继承(private)
  17. IE主页被篡改的修复方法
  18. Mesos | 1.3.2 webui static 界面代码分析 ——app.js/relative-date.js
  19. XILINX偶然加载不成功的问题原因及解决方法
  20. moment获取几小时前_moment.js 常用(几天前、相差几天、自然周、自然月)

热门文章

  1. Nginx之11吸星大法 - (页面缓存) 1
  2. Python和C++的混合编程(使用Boost编写Python的扩展包)
  3. spring 4.x下让http请求返回json串
  4. php 字符串操作函数
  5. JQuery Lightbox -- 一个简单而又谦恭的用来把图片覆盖在当前页面上的脚本
  6. 2.分布式服务架构:原理、设计与实战 --- 彻底解决分布式系统一致性的问题
  7. 24.Linux/Unix 系统编程手册(上) -- 进程的创建
  8. 10.卷1(套接字联网API)---SCTP 客户/服务器程序例子
  9. 139. php://
  10. 2.tcpdump(1)