八大排序--基数排序
来源:互联网 发布:iscroll.js 官网下载 编辑:程序博客网 时间:2024/06/05 14:46
基数排序:
将整形10进制按每位拆分,然后从低位到高位依次比较各个位。每次比较完进行排序,直到整个数组有序
主要分为两个过程:
(1)分配,先从个位开始,根据位值(0-9)分别放到0~9号桶中(比如53,个位为3,则放入3号桶中)
(2)收集,再将放置在0~9号桶中的数据按顺序放到数组中
重复(1)(2)过程,从个位到最高位,直到排好序为止(比如32位无符号整形最大数4294967296,最高位10位)
实现代码:
// 找到num的从低到高的第pos位的数据 int GetNumInPos(int num,int pos) { int temp = 1; for (int i = 0; i < pos - 1; i++) temp *= 10; return (num / temp) % 10; } //基数排序 pDataArray 无序数组;iDataNum为无序数据个数 void RadixSort(int* pDataArray, int iDataNum) { int *radixArrays[RADIX_10]; //分别为0~9的序列空间 for (int i = 0; i < 10; i++) { radixArrays[i] = (int *)malloc(sizeof(int) * (iDataNum + 1)); radixArrays[i][0] = 0; //index为0处记录这组数据的个数 } for (int pos = 1; pos <= KEYNUM_31; pos++) //从个位开始到31位 { for (int i = 0; i < iDataNum; i++) //分配过程 { int num = GetNumInPos(pDataArray[i], pos); int index = ++radixArrays[num][0]; radixArrays[num][index] = pDataArray[i]; } for (int i = 0, j =0; i < RADIX_10; i++) //收集 { for (int k = 1; k <= radixArrays[i][0]; k++) pDataArray[j++] = radixArrays[i][k]; radixArrays[i][0] = 0; //复位 } } }
0 0
- 八大排序之基数排序
- 八大排序算法--基数排序
- 八大排序--基数排序
- 八大排序算法-基数排序
- 八大排序算法之基数排序
- 八大排序算法之基数排序
- Java提高 - 八大排序方法之基数排序
- 八大排序算法详解——基数排序
- 八大排序算法之-基数排序 java代码
- 八大排序算法 之 基数排序(桶排序)
- 八大内部排序算法(中)-基数排序(java实现)
- [034]八大排序算法详解——基数排序
- 八大排序算法总结之二(简单选择算法,堆排序,归并排序,基数排序)
- 八大排序算法总结之二(简单选择算法,堆排序,归并排序,基数排序)
- 【排序】基数排序
- 【排序】基数排序
- 【排序】基数排序
- 排序 基数排序
- jquery datagrid 的一些用法
- 日常训练20161014 跟踪
- unity C# xml创建,获取,修改,删除(android同样适用)
- ubuntu14.04配置安装pycharm professional
- 解决UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 108: ordinal not in range(128
- 八大排序--基数排序
- 循环查询数据的性能问题及优化
- 假设一个重男轻女的国家,每个家庭都想生男孩,如果生了一个女孩,就会继续生,直到生下男孩为止,平均每户有多少个女孩?这个国家的男女比例是多少?
- 在linux下实现自己的ls -l
- Java十六进制字符串转byte和字符转字节
- JavaScript事件模型
- 网络通信解决了什么问题
- 大数据面试题
- Hibernate——<many-to-one/>