zoukankan      html  css  js  c++  java
  • 基数排序

    基数排序的本质是比相应位数上的值,如果位数不足则用0补齐的一个排序算法,该算法时间复杂度很低,但空间复杂度很高,是典型的空间换时间算法
    完整代码如下:

            public static void radixSort(int[] arr)
            {
                int max = arr[0];//假设第一个为最大值
                //foreach循环取得最大值
                foreach (int item in arr)
                {
                    if (item > max)
                    {
                        max = item;
                    }
                }
                int maxLength = (max + "").Length;//获得最大值的长度
                //定义一个二维数组,该二维数组表示有十个桶,每个桶可以装arr.Length个数(这么做是怕溢出)
                int[,] bucket = new int[10, arr.Length];
                //定义一个一维数组,该数组记录相应下标的桶装的元素的个数 例如eleofcount[0]=1 表示下标为0的桶装了一个元素
                int[] eleofcount = new int[10];
                //最外层循环,该循环次数为最大值的长度
                for (int j = 0, n = 1; j < maxLength; j++, n *= 10)
                {
                    //取出数组中本次外循环该取出的位数上的值(如第0轮应该取个位),并放入相应的桶中
                    for (int i = 0,n=10; i < arr.Length; i++,n*=10)
                    {
                        int ele = arr[i] / n % 10;
                        //难理解 bucket[0,0]则表示下标为0的桶里第0个元素为arr[i]
                        bucket[ele, eleofcount[ele]++] = arr[i];
                    }
                    int index = 0;//定义一个索引来把桶中元素放回原数组
                    //该循环遍历所有桶
                    for (int i = 0; i < eleofcount.Length; i++)
                    {
                        //如果下标为i的桶的eleofcount的值不为0 说明里面有元素
                        if (eleofcount[i] != 0)
                        {
                            //循环取出下标为i个桶的元素
                            for (int k = 0; k < eleofcount[i]; k++)
                            {
                                arr[index++] = bucket[i, k];
                            }
                        }
                        //把下标为i的桶清零
                        eleofcount[i] = 0;
                    }
                }
            }
  • 相关阅读:
    HTTP与HTTPS的区别
    Linux内核结构体--kfifo 环状缓冲区
    POSIX 线程详解
    linux的fork()函数-进程控制
    HDU 3435 A new Graph Game(最小费用最大流)&amp;HDU 3488
    Memcached安装使用和源代码调试
    结构-01. 有理数比較(10)
    Android:你不知道的 WebView 使用漏洞
    关于文件异步上传
    &lt;二代測序&gt; 批量下载 NCBI sra 文件
  • 原文地址:https://www.cnblogs.com/TheLin/p/13892600.html
Copyright © 2011-2022 走看看