<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      【算法】基數排序(Radix Sort)(十)

      基數排序(Radix Sort)

      基數排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優先級順序的,先按低優先級排序,再按高優先級排序。最后的次序就是高優先級高的在前,高優先級相同的低優先級高的在前。

      1.算法描述

      • 取得數組中的最大數,并取得位數;
      • arr為原始數組,從最低位開始取每個位組成radix數組;
      • 對radix進行計數排序(利用計數排序適用于小范圍數的特點)。

      2.動圖演示

      3.代碼實現

      //javascript實現
      //LSD Radix Sort
      var counter = [];
      function radixSort(arr, maxDigit) {
          var mod = 10;
          var dev = 1;
          for (var i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
              for(var j = 0; j < arr.length; j++) {
                  var bucket = parseInt((arr[j] % mod) / dev);
                  if(counter[bucket]==null) {
                      counter[bucket] = [];
                  }
                  counter[bucket].push(arr[j]);
              }
              var pos = 0;
              for(var j = 0; j < counter.length; j++) {
                  var value = null;
                  if(counter[j]!=null) {
                      while ((value = counter[j].shift()) != null) {
                            arr[pos++] = value;
                      }
                }
              }
          }
          return arr;
      }
      
      //java實現
      /**
       * 基數排序
       * 考慮負數的情況還可以參考: https://code.i-harness.com/zh-CN/q/e98fa9
       */
      public class RadixSort implements IArraySort {
      
          @Override
          public int[] sort(int[] sourceArray) throws Exception {
              // 對 arr 進行拷貝,不改變參數內容
              int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);
      
              int maxDigit = getMaxDigit(arr);
              return radixSort(arr, maxDigit);
          }
      
          /**
           * 獲取最高位數
           */
          private int getMaxDigit(int[] arr) {
              int maxValue = getMaxValue(arr);
              return getNumLenght(maxValue);
          }
      
          private int getMaxValue(int[] arr) {
              int maxValue = arr[0];
              for (int value : arr) {
                  if (maxValue < value) {
                      maxValue = value;
                  }
              }
              return maxValue;
          }
      
          protected int getNumLenght(long num) {
              if (num == 0) {
                  return 1;
              }
              int lenght = 0;
              for (long temp = num; temp != 0; temp /= 10) {
                  lenght++;
              }
              return lenght;
          }
      
          private int[] radixSort(int[] arr, int maxDigit) {
              int mod = 10;
              int dev = 1;
      
              for (int i = 0; i < maxDigit; i++, dev *= 10, mod *= 10) {
                  // 考慮負數的情況,這里擴展一倍隊列數,其中 [0-9]對應負數,[10-19]對應正數 (bucket + 10)
                  int[][] counter = new int[mod * 2][0];
      
                  for (int j = 0; j < arr.length; j++) {
                      int bucket = ((arr[j] % mod) / dev) + mod;
                      counter[bucket] = arrayAppend(counter[bucket], arr[j]);
                  }
      
                  int pos = 0;
                  for (int[] bucket : counter) {
                      for (int value : bucket) {
                          arr[pos++] = value;
                      }
                  }
              }
      
              return arr;
          }
      
          /**
           * 自動擴容,并保存數據
           *
           * @param arr
           * @param value
           */
          private int[] arrayAppend(int[] arr, int value) {
              arr = Arrays.copyOf(arr, arr.length + 1);
              arr[arr.length - 1] = value;
              return arr;
          }
      }
      

      4.算法分析

      基數排序基于分別排序,分別收集,所以是穩定的。但基數排序的性能比桶排序要略差,每一次關鍵字的桶分配都需要O(n)的時間復雜度,而且分配之后得到新的關鍵字序列又需要O(n)的時間復雜度。假如待排數據可以分為d個關鍵字,則基數排序的時間復雜度將是O(d*2n) ,當然d要遠遠小于n,因此基本上還是線性級別的。

      基數排序的空間復雜度為O(n+k),其中k為桶的數量。一般來說n>>k,因此額外空間需要大概n個左右。

      posted @ 2022-03-16 22:56  HZX↑  閱讀(72)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产午夜精品久久精品电影| 你懂的视频在线一区二区| 欧美黑人大战白嫩在线| 国产成人亚洲综合图区| 亚洲熟妇自偷自拍另亚洲| 久久人人妻人人做人人爽| 亚洲av综合色一区二区| 亚洲欧美高清在线精品一区二区| 精品国产亚洲av麻豆特色| 26uuu另类亚洲欧美日本| 韩国无码AV片午夜福利| 仁怀市| 亚洲性一交一乱一伦视频| 国产日韩一区二区四季| 山西省| 丰满的少妇一区二区三区| 国产av无码专区亚洲av软件| 久久精品熟女亚洲av艳妇| 国产a在视频线精品视频下载 | 亚洲国产精品久久久久婷婷图片| 爆乳2把你榨干哦ova在线观看| 蜜桃一区二区三区在线看| 济源市| 精品国产一区av天美传媒| 女人香蕉久久毛毛片精品| 久久综合干| 高潮精品熟妇一区二区三区| 武装少女在线观看高清完整版免费| 国产福利微视频一区二区| 麻豆一区二区三区蜜桃免费| 国产极品美女高潮无套| 无码国产精品一区二区av| 精品偷拍一区二区三区| 亚洲欧美中文日韩在线v日本| 一区二区丝袜美腿视频| 欧美精品高清在线观看| 99久久国产综合精品色| 欧美不卡无线在线一二三区观| 人妻系列无码专区免费 | 色综合AV综合无码综合网站| 亚洲国产精品久久电影欧美|