经典排序算法(十九)--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

软件介绍: 3S USB Flash Sorting and Mass Production Utility ver 3.026 (2009.10.14) (UltraNet)支持以下FLASHHynix HY27UF081G2A,1,5,ADF1801DADHynix HY27UF081G2M,1,4,ADF18015Hynix HY27UF082G2A,1,5,ADDA801D00Hynix HY27UF082G2A,1,5,ADDA801D00Hynix HY27UF082G2B,1,5,ADDA109544Hynix HY27UF082G2M,1,4,ADDA8015Hynix HY27UF084G2B,1,5,ADDC109554Hynix HY27UF084G2M,1,4,ADDC8095Hynix HY27UG084G2M,1,4,ADDC8015Hynix HY27UG088G5B,2,5,ADDC109554Hynix HY27UG088G5M,2,4,ADDC8095Hynix HY27UH088G2M,1,4,ADD38015Hynix HY27UH08AG5B,2,5,ADD3519558Hynix HY27UH08AG5M,2,4,ADD3C195Hynix HY27UT084G2M,1,4,ADDC8425Hynix HY27UT088G2A,1,5,ADD314A534Hynix HY27UT088G2M,1,5,ADD314A564Hynix HY27UU088G5M,2,4,ADDC8425Hynix HY27UU08AG5A,2,5,ADD314A543Hynix HY27UU08AG5M,2,5,ADD314A564Hynix HY27UV08AG5M,2,4,ADD38525Hynix HY27UV08BG5A,2,5,ADD555A538Hynix HY27UV08BG5M,2,5,ADD555A568Hynix HY27UAG8T2MT,1,5,ADD514B644Hynix HY27UAG8T2MTR,2,5,ADD514B644Intel 29F04G08AANC1,1,5,89DC909554,0,0,MP000Intel 29F08G08AAMB2,1,5,89D394A564,0,0,MP000Intel 29F08G08AANC ,1,5,89D3902E64,0,0,MP000Intel 29F16G08AAMC1,1,5,89D5943E74,0,0,MP000Intel 29F16G08AAMC2,1,5,89D5943E74,0,0,MP000Intel 29F16G08CAMB2,2,5,89D394A5E5,0,0,MP000Intel 29F32G08CAMC1,2,5,89D5943E74,0,0,MP000Micron MT29F02G08ABC  ,1,5,2CAA8015D0,0,0,MP000Micron MT29F02G08AANB3,1,5,2CDA801550,0,0,MP000Micron MT29F02G08AANB3,1,5,2CDA8015D0,0,0,MP000Micron MT29F02G08AAA  ,1,5,2CDA801550,0,0,MP000Micron MT29F02G08AAB  ,1,5,2CDA801550,0,0,MP000Micron MT29F02G08AAC  ,1,5,2CDA801550,0,0,MP000Micron MT29F04G08AANB1,1,5,2CDC909554,0,0,MP000Micron MT29F04G08BANB3,1,5,2CDC8015D0,0,0,MP000Micron MT29F04G08ABC-E,1,5,2CAC901554,0,0,MP000Micron MT29F04G08AAA  ,1,5,2CDC909554,0,0,MP000Micron MT29F04G08AAAWP,1,5,2CDC909554,0,0,MP000Micron MT29F04G08BAB  ,1,5,2CDC801550,0,0,MP000Micron MT29F08G08FAC  ,1,5,2CD3552558,0,0,MP000Micron MT29F08G08AAMB1,1,5,2CD394A564,0,0,MP000Micron MT29F08G08CANB1,2,5,2CDC909554,0,0,MP000Micron MT29F08G08CANB2,2,5,2CDC909554,0,0,MP000Micron MT29F08G08BAA  ,1,5,2CD3D19558,0,0,MP000Micron MT29F08G08DAA  ,2,5,2CDC909554,0,0,MP000Micron MT29F08G08FAB  ,2,5,2CDC801550,0,0,MP000Micron MT29F08G08MAD  ,1,5,2CD3942D64,0,0,MP000Micron MT29F16G08QAA  ,1,5,2CD5943E74,0,0,MP000Micron MT29F16G08MAA  ,1,5,2CD5943E74,0,0,MP000Micron MT29F16G08QAA  ,2,5,2CD394A564,0,0,MP000Micron MT29F32G08TAA  ,1,5,2CD7D53E78,0,0,MP000Samsung K9F1G08U0A,1,5,ECF1801540,0,0,MP000Samsung K9F1G08U0M,1,5,ECF1801540,0,0,MP000Samsung K9F2G08U0A,1,5,ECDA109544,0,0,MP000Samsung K9F2G08U0M,1,5,ECDA801550,0,0,MP000Samsung K9F4G08U0A,1,5,ECDC109554,0,0,MP000Samsung K9F4G08U0M,1,5,ECDC109554,0,0,MP000Samsung K9F8G08U0M,1,5,ECD310A664,0,0,MP000Samsung K9G2G08U0M,1,5,ECDA142544,0,0,MP000Samsung K9G4G08U0A,1,5,ECDC142554,0,0,MP000Samsung K9G4G08UOM,1,5,ECDC142554,0,0,MP000Samsung K9G8G08U0A,1,5,ECD314A564,0,0,MP000Samsung K9G8G08U0M,1,5,ECD3142564,0,0,MP000Samsung K9GAG08U0M,1,5,ECD514B674,0,0,MP000Samsung K9HBG08U1A,2,5,ECD555A568,0,0,MP000Samsung K9HBG08U1M,2,5,ECD5552568,0,0,MP000Samsung K9HCG08U1M,2,5,ECD755B678,0,0,MP000Samsung K9HCG08U5M,4,5,ECD514B674,0,0,MP000Samsung K9K4G08U0M,1,5,ECDCC11554,0,0,MP000Samsung K9K8G08U0A,1,5,ECD3519558,0,0,MP000Samsung K9K8G08U0M,1,5,ECD3519558,0,0,MP000Samsung K9KAG08U0M,1,5,ECD551A668,0,0,MP000Samsung K9L8G08U0A,1,5,ECD3552558,0,0,MP000Samsung K9L8G08UOM,1,5,ECD3552558,0,0,MP000Samsung K9LAG08U0A,1,5,ECD555A568,0,0,MP000Samsung K9LAG08U0M,1,5,ECD5552568,0,0,MP000Samsung K9LBG08U0M,1,5,ECD755B678,0,0,MP000Samsung K9MBG08U5M,4,5,ECD3552558,0,0,MP000Samsung K9MDG08U5M,4,5,ECD755B678,0,0,MP000Samsung K9MDG08U5M,4,5,ECD755B678,0,0,MP000Samsung K9NBG08U5A,4,5,ECD3519558,0,0,MP000Samsung K9NBG08U5M,4,5,ECD3519558,0,0,MP000Samsung K9W8G08U1M,2,5,ECDCC11554,0,0,MP000Samsung K9WAG08U1A,2,5,ECD3519558,0,0,MP000Samsung K9WAG08U1M,2,5,ECD3519558,0,0,MP000Samsung K9WBG08U1M,2,5,ECD551A668,0,0,MP000ST NAND02GW3B2AN6,1,5,20DA801520ST NAND04GW3B2BN6,1,5,20DC809520ST NAND08GW3B2BN6,1,5,20D314A534Toshiba TC58NVG03SAFT10,1,5,98F1801540,0,0,MP000Toshiba TC58NVG0D3BTG00,1,5,98F1849540,0,0,MP000Toshiba TC58NVG0S3AFTLO,1,5,98F18095C0,0,0,MP000Toshiba TC58NVG1D4BFxxx,1,5,98DA84A550,0,0,MP000Toshiba TC58NVG1S3BTG00,1,5,98DA809544,0,0,MP000Toshiba TC58NVG2D4BFT00,1,5,98DC84A554,0,0,MP000Toshiba TC58NVG2D4CTG00,1,5,98DC84A560,0,0,MP000  ; 70nm ABLToshiba TC58NVG3D1DTG00,1,5,98D394BA64,0,0,MP000Toshiba TC58NVG3D1DTG50,1,5,98D394BA70,0,0,MP000Toshiba TC58NVG3D4BFT00,1,5,98D385A558,0,0,MP000Toshiba TC58NVG3D4CTG00,1,5,98D384A566,0,0,MP000Toshiba TC58NVG3D4CTG00,1,5,98D384A5E6,0,0,MP000Toshiba TC58NVG4D1DTG00,1,5,98D594BA74,0,0,MP000Toshiba TH58NVG4D1DTG00,1,5,98D595BA68,0,0,MP000Toshiba TH58NVG5D1DTG20,2,5,98D595BA74,0,0,MP000Toshiba TH58NVG5D4CTG20,2,5,98D585A56A,0,0,MP000Toshiba TC58NVG5D1DTG20,1,5,98D595B278,0,0,MP000Toshiba TH58NVG6D1DTG20,2,5,98D795BA78,0,0,MP000不支持:Hynix HY27UBG8U5ATR,0,5,ADD5942544  ; Hynix 41nm (new ID table,4K)SMIC SMIC FLash,0,2,4ADA   ; SMIC Flash, (60-D1)SanDisk SanDisk 4Gb,0,2,45DC   ; SanDiskSanDisk SanDisk 8Gb,0,2,45D3   ; SanDiskSanDisk SanDisk 16Gb,0,2,45D5   ; SanDiskSanDisk SanDisk 32Gb,0,2,45D7   ; SanDiskMicron MT29F04G08,0,5,2CAC801560  ; SLC, Always access to Block-0 Samsung K9GAG08U0D,0,5,ECD5942934,4,512  ; 34nm 4K flash (New ID Table)Samsung K9GAG08U0A,0,5,ECD594367401,8,1024 ; new 8K flash (New ID table)Toshiba TC58NVG4D2ETA00,0,5,98D5943276,8 ; ce=0, means 43nm 8K not supportToshiba TC58NVG5D2ETA00,0,5,98D795327A,8 ; ce=0, means 43nm 8K not supportSpansion Spansion Flash,0,5,0127  ; SpansionToshiba TC58NVG4T2DTG00(X3),0,6,98D5988326130A ; Toshiba 56nm D3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值