使用c语言怎么实现基数排序?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
十余年的诏安网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整诏安建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“诏安网站设计”,“诏安网站推广”以来,每个客户项目都认真落实执行。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
1 81
2 22
3 73 93 43
4 14
5 55 65
6
7
8 28
9 39
第二步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
81,22,73,93,43,14,55,65,28,39
接着再进行一次分配,这次是根据十位数来分配:
0
1 14
2 22 28
3 39
4 43
5 55
6 65
7 73
8 81
9 93
第三步
接下来将这些桶子中的数值重新串接起来,成为以下的数列:
14,22,28,39,43,55,65,73,81,93
这时候整个数列已经排序完毕;如果排序的对象有三位数以上,则持续进行以上的动作直至最高位数为止。
#include#include #include using namespace std; int getDigitNum(int x){ if(x == 0) return 1; int res = 0; while(x){ res ++; x /= 10; } return res; } void RadixSort(int data[], int n){ //find the Maximum and its digit number int Max = data[0]; for(int i = 1; i < n; i++){ if(Max < data[i]) Max = data[i]; } int maxNum = getDigitNum(Max); //maxNum times radix sort int divisor = 1; for(int k = 0; k < maxNum; k++){ vector g[10];//g[i]中包含了"末位"数字是i的data[]数组中的元素 for(int i = 0; i < 10; i++) g[i].clear(); for(int i = 0; i < n; i++){ int tmp = data[i] / divisor % 10; g[tmp].push_back(data[i]); } int cnt = 0; for(int i = 0; i < 10; i++){ for(int j = 0; j < g[i].size(); j++){ data[cnt++] = g[i][j]; } } divisor *= 10; } } int main(){ int Array[10] = {73,22,93,43,55,14,28,65,39,81}; RadixSort(Array, 10); for(int i = 0; i < 10; i++){ printf("%d ", Array[i]); } printf("\n"); return 0; }
看完上述内容,你们掌握使用c语言怎么实现基数排序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联网站建设公司行业资讯频道,感谢各位的阅读!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:使用c语言怎么实现基数排序-创新互联
转载源于:http://lswzjz.com/article/dsjodj.html