基数排序
2015-11-14 18:02
405 查看
#include "stdafx.h" void Counting_Sort(int a[], int b[], int k, int len) { int c[100] = { 0 }, temp[100] = { 0 }; for (int j = 0; j < len; ++j) //统计等于i的个数 { ++c[a[j]]; } for (int i = 1; i < k + 1; ++i) //统计小于等于i的个数 { c[i] = c[i] + c[i - 1]; } for (int i = len - 1; i > -1; --i) //从a数组末尾开始赋值 { temp[c[a[i]] - 1] = b[i]; //数组序号从0开始,故需先减一;b中元素(原有数组元素)与a中元素(某位元素)对应,因此可以直接将b中元素(原有数组元素)放入暂存数组相应位置 --c[a[i]]; } for (int i = len - 1; i > -1; --i) //再将暂存数组中的元素复制到原有数组中,更新原有数组的排序 { b[i] = temp[i]; } } void Radix_Sort(int a[],int b[],int d,int len) { for (int i = 1; i < d+1; ++i) //i代表位数 { for (int m = 0; m < len ; ++m) //m代表元素数 { switch (i) { case 1: b[m] = a[m] % 10; //取最低位 break; case 2: b[m] = a[m] / 10 % 10; //取第二低位 break; case 3: b[m] = a[m] / 100 % 10; //取第三低位 break; case 4: b[m] = a[m] / 1000 % 10; //取第四低位 break; default: break; } } Counting_Sort(b, a, 9, len); } } int _tmain(int argc, _TCHAR* argv[]) { int a[] = { 123, 419, 914, 391, 456, 217, 666, 999 }; int len = sizeof(a) / 4; int b[sizeof(a) / 4] = { 0 }; Radix_Sort(a, b,3, len); for (int i = 0; i < len; ++i) { cout << a[i] << endl; } return 0; }
相关文章推荐
- 计数排序
- linux中的alsa工具与Android中的tinyalsa工具
- Apache配置防盗链
- [Android Pro] StarUML 版本破解
- Dom4j中的中文编码问题
- CSS从大图中抠取小图完整教程(background-position应用)
- Android中Service的一个Demo例子
- Android中Service的一个Demo例子
- Android中Service的一个Demo例子
- 【游】游戏Buff机制
- java Windows平台 调用c++
- 9.UITouch 保存手指的信息(触摸的点
- Linux中新增硬盘的分区,格式化与挂载
- spark java.lang.OutOfMemoryError: Java heap space
- ui总结
- 带密钥的sha1加密
- git操作流程
- [poj3114]Countries in War
- NP完全性理论简介
- Bad Hair Day-POJ3250(简单的入栈出栈)