基数排序 时间复杂度:O(n).
基本思路:两个数比较大小,我们的直观感觉是先比较高位,若相同则比较低位。但是这样做需要记录额外的数据,浪费空间。而基数排序则是先比较低位,再比较高位。通过各个位的比较进行排序,如果数组元素最大有N位,则总共需要N次排序。注意:按位排序必须是稳定排序,所以在这我选择了计数排序。具体操作见下图:
文章图片
具体实现如下:
#include
#include
#includevoid CountSort(int* arrayA,int* arrayD,int n,int k);
void RadixSort(int* arrayA,int n);
void main()
{
int arrayD[]={1046,2084,9046,12074,56,7026,8099,17059,33,1};
int n=sizeof(arrayD)/sizeof(int);
RadixSort(arrayD,n);
for(int i=0;
i=0;
j--)
{
arrayB[arrayC[arrayA[j]]-1]=arrayD[j];
arrayC[arrayA[j]]=arrayC[arrayA[j]]-1;
//进行计数排序
}
for(int i=0;
i
注意:我是在vs2008上运行的,与vc 6.0有点区别,主要是循环体中的循环变量的作用域,出错体现在循环变量的重复定义上。例如:在vs2008或vs2010上,程序为:
#include
void main()
{
int i=0;
for(int i=0; i<5; i++)
printf("%d ",i);
}
则在VC 6.0上需改为:
【C/C++|【算法导论】基数排序】#include
void main()
{
int i=0;
for(i=0; i<5; i++)
printf("%d ",i);
}
原文:http://blog.csdn.net/tengweitw/article/details/9670303
作者:nineheadedbird
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- C/C++|C/C++ basis 02
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转
- Qt实战|Qt+OpenCV联合开发(十四)--图像感兴趣区域(ROI)的提取
- Qt实战|Qt+OpenCV联合开发(十三)--通道分离与合并
- opencv|Qt+OpenCV联合开发(十六)--图像几何形状绘制
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- SNAT的MASQUERADE地址选择与端口选择
- IPTABLES的连接跟踪与NAT分析
- IPVS分析