经典排序算法-基数排序Radixsort
原理类似桶排序,这里总是需要10个桶,多次使用
首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数
例如
待排序数组[62,14,59,88,16]简单点五个数字
分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样
| 0 | 0 |62| 0 |14| 0 |16| 0 | 88|59|
| 0 | 1 | 2 | 3 | 4| 5 | 6 | 7 | 8 | 9 |桶编号
将桶里的数字顺序取出来,
输出结果:[62,14,16,88,59]
再次入桶,不过这次以十位数的数字为准,进入相应的桶,变成下边这样:
由于前边做了个位数的排序,所以当十位数相等时,个位数字是由小到大的顺序入桶的,就是说,入完桶还是有序
| 0 |14,16| 0 | 0 | 0 |59|62 |0 |88 | 0 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |桶编号
因为没有大过100的数字,没有百位数,所以到这排序完毕,顺序取出即可
最后输出结果:[14,16,59,62,88]
代码仅供参考
代码如下:
///<summary>
///基数排序
///约定:待排数字中没有0,如果某桶内数字为0则表示该桶未被使用,输出时跳过即可
///</summary>
///<paramname=”unsorted”>待排数组</param>
///<paramname=”array_x”>桶数组第一维长度</param>
///<paramname=”array_y”>桶数组第二维长度</param>
staticvoidradix_sort(int[]unsorted,intarray_x=10,intarray_y=100)
{
for(inti=0;i<array_x/*最大数字不超过999999999…(array_x个9)*/;i++)
{
int[,]bucket=newint[array_x,array_y];
foreach(variteminunsorted)
{
inttemp=(item/(int)Math.Pow(10,i))%10;
for(intl=0;l<array_y;l++)
{
if(bucket[temp,l]==0)
{
bucket[temp,l]=item;
break;
}
}
}
for(into=0,x=0;x<array_x;x++)
{
for(inty=0;y<array_y;y++)
{
if(bucket[x,y]==0)continue;
unsorted[o++]=bucket[x,y];
}
}
}
}
staticvoidMain(string[]args)
{
int[]x={999999999,65,24,47,13,50,92,88,66,33,22445,10001,624159,624158,624155501};
radix_sort(x);
foreach(variteminx)
{
if(item>0)
Console.WriteLine(item+”,”);
}
Console.ReadLine();
}
您可能感兴趣的文章:深入IComparable与IComparer的排序实例详解c#实现IComparable、IComparer接口、Comparer类的详解C#实现Datatable排序的方法C#中DataTable排序、检索、合并等操作实例c#对list排序示例c#集合快速排序类实现代码分享C#对DataTable里数据排序的方法C#键值对数据排序代码C#归并排序的实现方法(递归,非递归,自然归并)C#基础之数组排序、对象大小比较实现代码C#通过IComparable实现ListT.sort()排序
C++实现随机生成迷宫地牢
c#同步两个子目录文件示例分享 两个文件夹同步
上述就是C#学习教程:c#基数排序Radix sort的实现方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/905222.html