【排序】基数排序
2016-05-14 13:54
375 查看
#include<iostream> using namespace std; //求数据的最大位数 int get_max_bit(int nums[], int len){ int count; int max = 1; int* temp = new int[len]; for (int i = 0; i < len; i++) temp[i] = nums[i]; for (int i = 0; i < len; i++){ count = 0; while (temp[i]>0){ temp[i] /= 10; count++; } if (count>max) max = count; } delete[] temp; return max; } void radix_sort(int nums[], int len){ int i, j, k; int count[10];//各个桶的数据统计 int radix = 1;//基数 int* buckets = new int[len]; int max_bit = get_max_bit(nums, len); //按照从低位到高位的顺序执行排序过程 for (i = 1; i <= max_bit; i++){ memset(count, 0, sizeof(count));//置空各个桶的数据统计 for (j = 0; j < len; j++){ k = (nums[j] / radix) % 10; count[k]++;//统计各个桶将要装入的数据个数 } //count[j]表示第j个桶的右边界索引 for (j = 1; j < 10; j++) count[j] += count[j - 1]; //从右向左扫描将数据依次装入桶中,保证排序稳定性 for (j = len - 1; j >= 0; j--){ k = (nums[j] / radix) % 10; count[k]--; buckets[count[k]] = nums[j]; } cout << "按" << i << "位排序:"; //将已分配好的桶中数据再倒出来,此时已是对应当前位数有序的表 for (j = 0; j < len; j++){ nums[j] = buckets[j]; cout << nums[j] << " "; } cout << endl; radix *= 10; } } int main(){ int nums[] = { 34, 25, 76, 234, 62, 17 }; radix_sort(nums, 6); cout << "最终排序结果:"; for (int i = 0; i<6; i++) cout << nums[i] << " "; cout << endl; return 0; }
相关文章推荐
- Time类中的运算符重载
- 关于django服务器重启端口占用解决方案
- java中的PO/VO/DAO/BO/POJO简单介绍
- java实现静态图片剪切缩放功能【工具类】
- 观察者模式
- 倒排句子的单词
- Json解析详细教程
- ClassNotFoundException: org.apache.ws.commons.schema.resolver.URIResolver
- 第三节,入门知识和windows系统安装python环境
- Spring+mybatis分库分表
- 表单新增元素与属性
- SSH框架应用解析
- HZAU 1006 The Nearest Same Chocolate
- SSH框架应用解析
- tengine 淘宝 nginx
- HDU4463-Outlets,简单最小生成树。1A水过~~
- Qt5 QSqlDataBase很好的错误说明 关于连接
- Poj 1741 Tree
- 一段snmp代码
- SQLite 总结