C#算法设计排序篇之09-基数排序(附带动画演示程序)
基数排序(Radix Sort)
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/691 访问。
基数排序属于“分配式排序”(Distribution Sort),它是透过键值的部份信息,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为  ,其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法。
示例:
public class Program {
    public static void Main(string[] args) {
        int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };
        RadixSort(array, 10);
        ShowSord(array);
        Console.ReadKey();
    }
    private static void ShowSord(int[] array) {
        foreach (var num in array) {
            Console.Write($"{num} ");
        }
        Console.WriteLine();
    }
    public static void RadixSort(int[] array, int bucketNum) {
        int maxLength = MaxLength(array);
        //创建bucket时,在二维中增加一组标识位,其中bucket[x, 0]表示这一维所包含的数字的个数
        //通过这样的技巧可以少写很多代码
        int[,] bucket = new int[bucketNum, array.Length + 1];
        for (int i = 0; i < maxLength; i++) {
            foreach (var num in array) {
                int bit = (int)(num / Math.Pow(10, i) % 10);
                bucket[bit, ++bucket[bit, 0]] = num;
            }
            for (int count = 0, j = 0; j < bucketNum; j++) {
                for (int k = 1; k <= bucket[j, 0]; k++) {
                    array[count++] = bucket[j, k];
                }
            }
            //最后要重置这个标识
            for (int j = 0; j < bucketNum; j++) {
                bucket[j, 0] = 0;
            }
        }
    }
    private static int MaxLength(int[] array) {
        if (array.Length == 0) return 0;
        int max = array[0];
        for (int i = 1; i < array.Length; i++) {
            if (array[i] > max) max = array[i];
        }
        int count = 0;
        while (max != 0) {
            max /= 10;
            count++;
        }
        return count;
        //return (int)Math.Log10(max) + 1;
    }
}以上是基数排序算法的一种实现,以下是这个案例的输出结果:
该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/691 访问。
8 11 21 28 32 43 48 56 69 72 80 94分析:
基数排序算法的时间复杂度为:  ,其中r为所采取的基数,m为堆数。
AlgorithmMan:
AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
C#算法设计排序篇之09-基数排序(附带动画演示程序)的更多相关文章
- C#算法设计排序篇之04-选择排序(附带动画演示程序)
		选择排序(Selection Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/681 访问. 选择排序是一种简 ... 
- C#算法设计排序篇之06-堆排序(附带动画演示程序)
		堆排序(Heap Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/685 访问. 堆排序是指利用堆积树(堆)这 ... 
- C#算法设计排序篇之08-计数排序(附带动画演示程序)
		计数排序(Counting Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/689 访问. 计数排序是一个非基 ... 
- C#算法设计排序篇之07-希尔排序(附带动画演示程序)
		希尔排序(Shell's Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/687 访问. 希尔排序是插入排序的 ... 
- C#算法设计排序篇之05-归并排序(附带动画演示程序)
		归并排序(Merge Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/683 访问. 归并排序是建立在归并操作 ... 
- C#算法设计排序篇之03-直接插入排序(附带动画演示程序)
		直接插入排序(Straight Insertion Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/679 访 ... 
- C#算法设计排序篇之02-快速排序(附带动画演示程序)
		快速排序(Quick Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/677 访问. 快速排序由C. A. R ... 
- C#算法设计排序篇之01-冒泡排序(附带动画演示程序)
		冒泡排序(Bubble Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/672 访问. 它重复地访问要排序的元 ... 
- C#算法设计排序篇之10-桶排序(附带动画演示程序)
		桶排序(Bucket Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/693 访问. 桶排序的工作原理是将数组 ... 
随机推荐
- 静态代理,动态代理和CGLIB代理模式
			代理模式 一.概述 代理是一种模式,提供了对目标对象的间接访问方式,即通过代理访问目标对象.如此便于在目标实现的基础上增加额外的功能操作,前拦截,后拦截等,以满足自身的业务需求,同时代理模式便于扩展目 ... 
- 一、Python系列——函数的应用之名片管理系统
			card_list = [] def main_desk(): print('*'*50) print('欢迎使用[名片管理系统]V1.0') print('1.新建名片') print('2.显示全 ... 
- msf stagers开发不完全指北(四): msf 中使用域前置技术隐藏流量
			msf 中使用域前置技术隐藏流量 前几篇都是说了下如何采用不同的语言开发 reverse_tcp 第二阶段,接下来将慢慢分析 reverse_http,这篇文章并不会围绕 stagers 进行讲解,这 ... 
- WYT的刷子
			WYT的刷子 题目描述 WYT有一把巨大的刷子,刷子的宽度为M米,现在WYT要使用这把大刷子去粉刷有N列的栅栏(每列宽度都为1米:每列的高度单位也为米,由输入数据给出). 使用刷子的规则是: 与地面垂 ... 
- 常用的 Systemctl 命令
			常用的 Systemctl 命令 设置开机启动 systemctl enable apache.service 立即启动一个服务 $ sudo systemctl start apache.servi ... 
- python爬虫常用headers设置
			import random import re def headers(url, use='pc'): pc_agent = [ "Mozilla/5.0 (Macintosh; U; In ... 
- LQB2013A03振兴中华
			最近状态出了点问题呜呜呜,可能是天有点热吧加上有一点点不太舒服,,,稳住啊! 明显一个递归(但是就是不会写) 递归:(一般这种找有多少个的题,返回值都是int) 首先找变化的东西当作参数.(本题是坐标 ... 
- Arduino+温度、湿度传感器
			Arduino语言注解Arduino语言是建立在C/C++基础上的,其实也就是基础的C语言,Arduino语言只不过把AVR单片机(微控制器)相关的一些参数设置都函数化,不用我们去了解他的底层,让我们 ... 
- Python列表脚本操作符
			Python列表脚本操作符: len(列表名): 查看列表长度 # 使用 len(列表名) 方法查看列表长度 lst = [1,2,3,4] print(len(lst)) # # 注:嵌套列表算一个 ... 
- centOS7.*安装nginx和简单使用
			安装nginx 去官网下载对应的nginx包,推荐使用稳定版本. 上传下载好的包到服务器 安装依赖环境 安装gcc环境. yum install gcc-c++ 安装PCRE库,用于解析正则表达式. ... 
