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;
                    }
                }
            }
  • 相关阅读:
    HDU 5818 Joint Stacks
    HDU 5816 Hearthstone
    HDU 5812 Distance
    HDU 5807 Keep In Touch
    HDU 5798 Stabilization
    HDU 5543 Pick The Sticks
    Light OJ 1393 Crazy Calendar (尼姆博弈)
    NEFU 2016省赛演练一 I题 (模拟题)
    NEFU 2016省赛演练一 F题 (高精度加法)
    NEFU 2016省赛演练一 B题(递推)
  • 原文地址:https://www.cnblogs.com/TheLin/p/13892600.html
Copyright © 2011-2022 走看看