c语言实现基数排序解析及代码示例
1.
基数排序(radixsort)属于“分配式排序”(distributionsort),又称“桶子法”(bucketsort)或binsort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。
2.基数排序的实现方法分为两种:
最高位优先(MostSignificantDigitfirst)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。
最低位优先(LeastSignificantDigitfirst)法,简称LSD法:先从kd开始排序,再对kd-1进行排序,依次重复,直到对k1排序后便得到一个有序序列。
3.LSD基数排序的原理及代码实现如下:
第一步
假设原来有一串数值如下所示:
73,22,93,43,55,14,28,65,39,81
首先根据个位数的数值,在走访数值时将它们分配至编号0到9的桶子中:
0
181
222
3739343
414
55565
6
7
828
939
第二步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
81,22,73,93,43,14,55,65,28,39
接着再进行一次分配,这次是根据十位数来分配:
0
114
22228
339
443
555
665
773
881
993
第三步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
14,22,28,39,43,55,65,73,81,93
这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。
#include#include #include usingnamespacestd; intgetDigitNum(intx){ if(x==0)return1; intres=0; while(x){ res++; x/=10; } returnres; } voidRadixSort(intdata[],intn){ //findtheMaximumanditsdigitnumber intMax=data[0]; for(inti=1;i g[10];//g[i]中包含了"末位"数字是i的data[]数组中的元素 for(inti=0;i<10;i++)g[i].clear(); for(inti=0;i 总结
以上就是本文关于c语言实现基数排序解析及代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!