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;
                    }
                }
            }
  • 相关阅读:
    前端开发面试题总结之——HTML
    HashMap的那些事
    抽象同步队列AQS(中)—— AQS的重点方法解析
    抽象同步队列AQS(上)—— 宏观上理解AQS
    synchronized原理详解
    volatile原理详解
    JMM模型详解
    计算机运行时内存&处理器CPU初步认知
    mysql-索引详解
    mysql-事务隔离机制&mvcc原理
  • 原文地址:https://www.cnblogs.com/TheLin/p/13892600.html
Copyright © 2011-2022 走看看