• Java实现基数排序


    • 基本介绍

    基数排序属于“分配式排序”,它通过元素的各个位的值,将元素放置对应的“桶”中

    基数排序属于稳定性排序,效率高,但是过多的元素会出现虚拟机运行内存的不足(千万个元素)

    • 基本思想

    把元素统一为同样长度的数组长度   元素较短的数前面补0,比如(1 15 336   看成  001 015 336)

    然后从最低位开始,以此进行排序。

    •  代码实现

    public static void radix_sortin(int[] str) {
      
      // 桶  10个桶  每个桶的最大容量默认为数组长度
      int[][] bucket = new int[10][str.length];
      // 每个桶的当前容量
      int[] capacity = new int[10];
           
      //元素求出最大数                                                                                                                                                                                                                                                                                                                                                                                                                                          
      int max = str[0];
      for (int r = 0; r < str.length; r++) {
       if (str[r] > max) {
        max = str[r];
       }
      }
      //求出最大长度 用于判断循环几大轮 
      int length = (max + "").length();
           
          //取得(个位 十位 百位。。。。)基数     
      for (int b= 0,u=1; b < length; b++,u*=10) {
       for (int i = 0; i < str.length; i++) {
        int base = str[i] /u % 10;  //比如基数为 4
        //将基数按照规则放进桶中
        bucket[base][capacity[base]] = str[i];     //放进第四个桶中 的第一几个当前容量位置
        capacity[base]++;   //容量增加
       }
       
       // 取出数据
       int d = 0;
       for (int k = 0; k < capacity.length; k++) {
        if (capacity[k] != 0) {
         for (int p = 0; p < capacity[k]; p++) {
          str[d] = bucket[k][p];
          d++;
         }
        }
        //注意:清零
        capacity[k] = 0;
       }
      }
     }
  • 相关阅读:
    玩聚的互联网热点新发现 精度上升到了一个新高度
    玩聚热点新发现中国的techmeme
    个性化阅读的过去和未来【中】
    【职经分享】走出公司进入产业建立圈子
    玩聚Alpha版本上线运行
    产品路径经营者当局者迷
    个性化阅读的过去和未来【上】
    Web2.0人性驱动的事业和仿生学
    获得硬盘上文件 文件夹
    电脑上QQ出现“该页面暂时无法显示”解决办法!
  • 原文地址:https://www.cnblogs.com/miwujun/p/12680876.html
Copyright © 2020-2023  润新知