一个比快速算法更快的排序算法: flashsort

现在最快的排序算法是快速排序算法,它的时间复杂度达到O(n log n).但是还有一种排序算法,就是FlashSort排序算法.它的时间复杂度达到O(n),超过了前者.FlashSort排序是基于分类的算法,它的实现思想很简单,是利用构造出来的索引来排序.举一个简单的例子,比如有一百个整数,你很容易就能把它们放在数组的正确位置上,根本不需要作任何比较. flashsort 主页: http://www.neubert.net/FSOIntro.html 附C实现代码: [code type="c"] /***** FLASH.C ,FLOAT-, recursive subroutine version Translation of Neubert's algorithm into C by Michael Sahota *****/ /* Subroutine Flash(a,n,m,ctr) - Sorts array a with n elements by use of the index vector l of dimension m (with m about 0.1 n). - The routine runs fastest with a uniform distribution of elements. - The vector l is declare dynamically using the calloc function. - The variable ctr counts the number of times that flashsort is called. - THRESHOLD is a very important constant. It is the minimum number of elements required in a subclass before recursion is used. */ #include #include #include const int THRESHOLD = 75; const CLASS_SIZE = 75; /* minimum value for m */ void flashsort(float a[],int n,int m,int *ctr) { /* declare variables */ int *l,nmin,nmax,i,j,k,nmove,nx,mx; float c1,c2,flash,hold; /* allocate space for the l vector */ l=(int*)calloc(m,sizeof(int)); /***** CLASS FORMATION ****/ nmin=nmax=0; for (i=0 ; i < n ; i++) if (a[i] < a[nmin]) nmin = i; else if (a[i] > a[nmax]) nmax = i; if ( (a[nmax]==a[nmin]) && (ctr==0) ) { printf("All the numbers are identical, the list is sorted "); return; } c1=(m-1.0)/(a[nmax]-a[nmin]) ; c2=a[nmin]; l[0]=-1; /* since the base of the "a" (data) array is 0 */ for (k=1; k < m ; k++) l[k]=0; for (i=0; i < n ; i++) { k=floor(c1*(a[i]-c2) ); l[k]+=1; } for (k=1; k < m ; k++) l[k]+=l[k-1]; hold=a[nmax]; a[nmax]=a[0]; a[0]=hold; /**** PERMUTATION *****/ nmove=0; j=0; k=m-1; while ( nmove < n ) { while ( j > l[k] ) { j++; k=floor(c1*(a[j]-c2) ) ; } flash=a[ j ] ; while ( j <= l[k] ) { k=floor(c1*(flash-c2)); hold=a[ l[k] ]; a[ l[k] ] = flash; l[k]--; flash=hold; nmove++; } } /**** Choice of RECURSION or STRAIGHT INSERTION *****/ for (k=0;k THRESHOLD ) /* then use recursion */ { flashsort(&a[l[k]+1],nx,CLASS_SIZE,ctr); (*ctr)++; } else /* use insertion sort */ for (i=l[k+1]-1; i > l[k] ; i--) if (a[i] > a[i+1]) { hold=a[i]; j=i; while (hold > a[j+1] ) a[j++]=a[j+1] ; a[j]=hold; } free(l); /* need to free the memory we grabbed for the l vector */ } [/code]

转载于:https://www.cnblogs.com/qtchina/archive/2010/06/16/1759132.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件介绍: 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、付费专栏及课程。

余额充值