Csharp/C#教程:c#基数排序Radix sort的实现方法分享

经典排序算法-基数排序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()排序

标签: 排序 sort 基数排序 方法 c#

C++实现随机生成迷宫地牢

c#同步两个子目录文件示例分享 两个文件夹同步

上述就是C#学习教程:c#基数排序Radix sort的实现方法分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/905222.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐