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

    /*
          * 获取数组a中最大值
          *
          * 参数说明:
          *     a -- 数组
          *     n -- 数组长度
          */
            private int GetMax(int[] a)
            {
                int max;
    
                max = a[0];
                for (int i = 1; i < a.Length; i++)
                    if (a[i] > max)
                        max = a[i];
    
                return max;
            }
    
            /*
             * 对数组按照"某个位数"进行排序(桶排序)
             *
             * 参数说明:
             *     a -- 数组
             *     exp -- 指数。对数组a按照该指数进行排序。
             *
             * 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616};
             *    (01) 当exp=1表示按照"个位"对数组a进行排序
             *    (02) 当exp=10表示按照"十位"对数组a进行排序
             *    (03) 当exp=100表示按照"百位"对数组a进行排序
             *    ...
             */
            private void CountSort(int[] a, int exp)
            {
                //int output[a.length];    // 存储"被排序数据"的临时数组
                int[] output = new int[a.Length];    // 存储"被排序数据"的临时数组
                int[] buckets = new int[10];
    
                // 将数据出现的次数存储在buckets[]中
                for (int i = 0; i < a.Length; i++)
                    buckets[(a[i] / exp) % 10]++;
    
                // 更改buckets[i]。目的是让更改后的buckets[i]的值,是该数据在output[]中的位置。
                for (int i = 1; i < 10; i++)
                    buckets[i] += buckets[i - 1];
    
                // 将数据存储到临时数组output[]中
                for (int i = a.Length - 1; i >= 0; i--)
                {
                    output[buckets[(a[i] / exp) % 10] - 1] = a[i];
                    buckets[(a[i] / exp) % 10]--;
                }
    
                // 将排序好的数据赋值给a[]
                for (int i = 0; i < a.Length; i++)
                    a[i] = output[i];
    
                output = null;
                buckets = null;
            }
    
            /*
             * 基数排序
             *
             * 参数说明:
             *     a -- 数组
             */
            public void RadixSort(int[] a)
            {
                int exp;    // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;...
                int max = GetMax(a);    // 数组a中的最大值
    
                // 从个位开始,对数组a按"指数"进行排序
                for (exp = 1; max / exp > 0; exp *= 10)
                    CountSort(a, exp);
            }
  • 相关阅读:
    LeetCode偶尔一题 —— 617. 合并二叉树
    《剑指offer》 —— 链表中倒数第k个节点
    《剑指offer》 —— 青蛙跳台阶问题
    《剑指offer》—— 二维数组中的查找
    《剑指offer》—— 替换空格
    《剑指offer》—— 合并两个排序的链表
    《剑指offer》—— 礼物的最大价值
    生成Nuget 源代码包来重用你的Asp.net MVC代码
    Pro ASP.Net Core MVC 6th 第四章
    Pro ASP.NET Core MVC 6th 第三章
  • 原文地址:https://www.cnblogs.com/asenyang/p/6936402.html
Copyright © 2011-2022 走看看