博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基数排序
阅读量:6879 次
发布时间:2019-06-27

本文共 1544 字,大约阅读时间需要 5 分钟。

基本思想

基数排序不是基于比较的排序,它的原理是将整数分割成多位单个数字,然后依次按每位的数字进行排序(必须是稳定的排序),最终得到结果。当然,它的用途也不仅限于对数字的排序。

图解

先按个位大小对数进行排序,再按十位排序,最后按百位排序即得到结果

代码

伪代码

C代码

#include 
#include
#include
void Counting_sort(int * a, int * b, int k, int len, int * ans)//内部稳定排序,按数组a来对数组ans排序,结果放在b里{ k++; int * c = (int *)malloc(sizeof(int)*k); int i, j; for(i = 0; i < k; i++) { c[i] = 0; } for(j = 0; j < len; j++) { c[a[j]] += 1; } for(i = 1; i < k; i++) { c[i] += c[i-1]; } for(j = len-1; j >= 0; j--) { b[c[a[j]]-1] = ans[j]; c[a[j]]--; }}void Radix_sort(int * a, int * b, int k, int len)//基数排序{ int i; int Max = a[0]; for(i = 1; i < len; i++)//找最大数 { if(a[i] > Max) Max = a[i]; } int count = 1;//循环次数 while(Max/10!=0)//通过最大数算所需循环次数 { Max/=10; count++; } int p[len];//存放单位数 int t = 1; while(count!=0) { for(i = 0; i < len; i++)//计算单位数 { p[i] = a[i] % (int)pow(10,t) / pow(10,t-1); } t++; Counting_sort(p,b,k,len,a);//内部稳定排序 for(i = 0; i < len; i++) { a[i] = b[i]; } count--; }}void Show(int * p, int len){ int i; for(i = 0; i < len; i++) { printf("%d ", p[i]); } printf("\n");}int main(){ int len = 8; int a[] = {12,15,13,0,12,3,0,3}; int k = 20; int b[8]; Radix_sort(a,b,k,len); Show(b,len); return 0;}

转载于:https://www.cnblogs.com/w-j-c/p/9792182.html

你可能感兴趣的文章
序列化模块、导入模块
查看>>
thinkphp3.1课程 1-1 为什么thinkphp在开发好后需要关掉开发模式
查看>>
用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
查看>>
Teradata 语句简单优化
查看>>
c# 通过关键字查询
查看>>
已知一个字符串S 以及长度为n的字符数组a,编写一个函数,统计a中每个字符在字符串中的出现次数...
查看>>
jquery
查看>>
伏地魔
查看>>
linux
查看>>
安装虚拟机-linux系统步骤
查看>>
集训第五周动态规划 J题 括号匹配
查看>>
微信小程序车牌键盘
查看>>
python 网络编程
查看>>
【BZOJ】2165: 大楼
查看>>
【BZOJ】2442: [Usaco2011 Open]修剪草坪
查看>>
2分钟读懂UML
查看>>
Curso de FP Interpretacion Lenguaje de Signos a distancia.
查看>>
HTML图像
查看>>
类和对象简析
查看>>
深入Java集合学习系列:LinkedHashSet的实现原理
查看>>