精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

基數排序的1個小技巧,2種排序方式,3種排序算法

開發 前端 算法
基數排序是非比較型整數排序算法,其原理是將整數按位分割進行排序。基數排序適用于大范圍數據排序,打破了計數排序的限制。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。

[[421174]]

基數排序

概念

基數排序是非比較型整數排序算法,其原理是將整數按位分割進行排序。基數排序適用于大范圍數據排序,打破了計數排序的限制。由于整數也可以表達字符串(比如名字或日期)和特定格式的浮點數,所以基數排序也不是只能使用于整數。

2種排序方式

最低位優先法(LSD):從最低位向最高位依次按位進行排序。

最高位優先法(MSD):從最高位向最低位依次按位進行排序。

按位分割小技巧

arr[i] / digit % 10,其中digit為10^n。

LSD排序算法實現

算法思想

按位進行計數排序

算法實現代碼

  1. /** 
  2.      * 按位進行計數排序 
  3.      * @param arr 
  4.      * @param divid 
  5.      * @return 
  6.      */ 
  7. private static int[] countingSort(int[] arr, int divid){ 
  8.  
  9.     int[] bucket = new int[10]; 
  10.     for (int i = 0; i < arr.length; i++) { 
  11.         bucket[arr[i] / divid % 10]++; 
  12.     } 
  13.  
  14.     for (int i = 1; i < bucket.length; i++) { 
  15.         bucket[i] = bucket[i-1] + bucket[i]; 
  16.     } 
  17.  
  18.     int[] sortArr = new int[arr.length]; 
  19.     for (int i = arr.length - 1; i >= 0; i--){ 
  20.         int position = bucket[arr[i] / divid % 10]; 
  21.         sortArr[position - 1] = arr[i]; 
  22.         bucket[arr[i] / divid % 10]--; 
  23.     } 
  24.     return sortArr; 
  25.  
  26. public static int[] radixSort(int[] arr) { 
  27.     // 查找數組最大值 
  28.     int max = arr[0]; 
  29.     for (int i = 0; i < arr.length; i++) { 
  30.         max = Math.max(arr[i], max); 
  31.     } 
  32.     // 按位排序 
  33.     int digit = 1; 
  34.     for (int i = 1; i < max; digit*=10, i = digit) { 
  35.         arr = countingSort(arr, digit); 
  36.     } 
  37.     return arr; 

排序驗證:

  1. public static void main(String[] args) { 
  2.      int[] arr = {999,1000,1001,1000,999,1005}; 
  3.      System.out.println("排序前:" + JSON.toJSONString(arr)); 
  4.      int[] sortArr = radixSort(arr); 
  5.      System.out.println("排序后:" + JSON.toJSONString(sortArr)); 
  6.  } 

排序前:[999,1000,1001,1000,999,1005] 排序后:[999,999,1000,1000,1001,1005]

MSD排序算法實現

算法思想

從最高位開始,按位分組,當組內元素個數>1時,遞歸下一位分組,一直分到個位結束;收集元素個數=1的。

算法步驟

  • 查詢最大值,獲取最高位的基數。Math.pow(10, digit - 1)
  • 按位分組,存入桶內。groupBucket[position][groupCounter[position]] =arr[i];
  • 組內元素數量>1,下一位遞歸分組。if (groupBucket[i] > 1) {int[] tmp = msdSort(copyArr, radix / 10);}
  • 組內元素數量=1,收集元素。sortArr[index++] = groupBucket[i][0];

比如,對數組[333,1002,1001,1000,333,1003,2000]進行排序,操作步驟如下:

算法實現代碼

  1. public static int[] sort(int[] arr){ 
  2.  
  3.     int max = arr[0]; 
  4.     for (int i = 0; i < arr.length; i++) { 
  5.         // 獲取最大值 
  6.         max = Math.max(arr[i], max); 
  7.     } 
  8.  
  9.     // 獲取最大值的位數 
  10.     int digit = getDataDigit(max); 
  11.     // 計算最大值的基數 
  12.     int radix = new Double(Math.pow(10, digit - 1)).intValue(); 
  13.     // msd基數排序 
  14.     return msdSort(arr, radix); 
  15.  
  16. /** 
  17.      * MSD 基數排序 
  18.      * @param arr 
  19.      * @param radix 
  20.      * @return 
  21.      */ 
  22. public static int[] msdSort(int[] arr, int radix){ 
  23.  
  24.     // 遞歸分組到個位,退出 
  25.     if (radix <= 0) { 
  26.         return arr; 
  27.     } 
  28.  
  29.     // 分組計數器 
  30.     int[] groupCounter = new int[10]; 
  31.     // 分組桶 
  32.     int[][] groupBucket = new int[10][arr.length]; 
  33.     // 遍歷待排序數組,按位分組 
  34.     for (int i = 0; i < arr.length; i++) { 
  35.         // 計算分組桶位置 
  36.         int position = arr[i] / radix % 10; 
  37.         // 將元素存入分組 
  38.         groupBucket[position][groupCounter[position]] = arr[i]; 
  39.         // 當前分組計數加1 
  40.         groupCounter[position]++; 
  41.     } 
  42.  
  43.     int index = 0; 
  44.     int[] sortArr = new int[arr.length]; 
  45.  
  46.     // 遍歷分組計數器 
  47.     for (int i = 0; i < groupCounter.length; i++) { 
  48.         // 組內元素數量>1,遞歸分組 
  49.         if (groupCounter[i] > 1) { 
  50.             int[] copyArr = Arrays.copyOf(groupBucket[i], groupCounter[i]); 
  51.             // 遞歸分組 
  52.             int[] tmp = msdSort(copyArr, radix / 10); 
  53.             // 收集遞歸分組后的元素 
  54.             for (int j = 0; j < tmp.length; j++) { 
  55.                 sortArr[index++] = tmp[j]; 
  56.             } 
  57.         } else if (groupCounter[i] == 1) { 
  58.             // 收集組內元素數量=1的元素 
  59.             sortArr[index++] = groupBucket[i][0]; 
  60.         } 
  61.     } 
  62.  
  63.     return sortArr; 
  64.  
  65. /** 
  66.      * 獲取數據的位數 
  67.      * @param data 
  68.      * @return 
  69.      */ 
  70. public static int getDataDigit(int data) { 
  71.     //        int index = 0; 
  72.     //        int digit = 1; 
  73.     //        while (data / digit >0) { 
  74.     //            digit *= 10; 
  75.     //            index++; 
  76.     //        } 
  77.     //        return index
  78.  
  79.     return String.valueOf(data).length(); 

驗證排序結果:

  1. public static void main(String[] args) { 
  2.     int[] arr = {333,1002,1001,1000,333,1003,2000}; 
  3.     System.out.println("排序前:" + JSON.toJSONString(arr)); 
  4.     int[] sortArr = sort(arr); 
  5.     System.out.println("排序后:" + JSON.toJSONString(sortArr)); 

排序前:[333,1002,1001,1000,333,1003,2000] 排序后:[333,333,1000,1001,1002,1003,2000]

三向切分字符快速排序

算法思想

按位將字符串切分為三個區間,小于v區間:[lo,lt-1],等于v區間:[lt,gt],大于v區間: [gt+1,hi],依次遞歸三個區間。

算法步驟

  • 定義小于v區間的看門狗lt,大于v區間的看門狗gt。
  • 按位比較劃分三個區間。
  • 遞歸三個區間。

算法實現代碼

  1. /** 
  2.      * 按位將字符串切分為三個區間 
  3.      * 1. 小于v區間:[lo,lt] 
  4.      * 2. 等于v區間:[lt,gt] 
  5.      * 3. 大于v區間: [gt+1,hi] 
  6.      * @param arr 
  7.      * @param lo 
  8.      * @param hi 
  9.      * @param d 
  10.      */ 
  11. public static void sortStr(String[] arr, int lo, int hi, int d){ 
  12.     if (hi <= lo) { 
  13.         return
  14.     } 
  15.     // 定義小于v的看門lt, 大于v的看門gt 
  16.     int lt = lo, gt = hi, i = lo + 1, v = charAt(arr[lo],d); 
  17.     while (i <= gt){ 
  18.         int t = charAt(arr[i], d); 
  19.         if (t < v) { 
  20.             exch(arr, i++, lt++); 
  21.         } else if (t > v) { 
  22.             exch(arr, i, gt--); 
  23.         } else { 
  24.             i++; 
  25.         } 
  26.     } 
  27.  
  28.     // 遞歸小于v的區間 
  29.     sortStr(arr, lo, lt - 1, d); 
  30.     // 遞歸等于v的區間 
  31.     if (v >= 0) { 
  32.         sortStr(arr, lt, gt, d + 1); 
  33.     } 
  34.     // 遞歸大于v的區間 
  35.     sortStr(arr, gt + 1, hi, d); 
  36. private static int charAt(String s, int d) { 
  37.     if (d < s.length()) { 
  38.         return s.charAt(d); 
  39.     } 
  40.     return -1; 
  41. public static void exch(String[] arr, int sourceIdx, int targetIdx) { 
  42.     String tmp = arr[sourceIdx]; 
  43.     arr[sourceIdx] = arr[targetIdx]; 
  44.     arr[targetIdx] = tmp; 
  45. 結果驗證: 
  46.  
  47.  public static void main(String[] args) { 
  48.      String[] a = new String[]{"by","air","she","shell","the","okay","bump","shirt","shells","sh","the","shells","the"}; 
  49.      System.out.println("排序前:" + JSON.toJSONString(a)); 
  50.      sortStr(a, 0, a.length - 1, 0); 
  51.      System.out.println("排序后:" + JSON.toJSONString(a)); 
  52.  } 

排序前:["by","air","she","shell","the","okay","bump","shirt","shells","sh","the","shells","the"] 排序后:["air","bump","by","okay","sh","she","shell","shells","shells","shirt","the","the","the"]

三種排序算法對比

算法

是否穩定

原地排序

運行時間

額外空間

優點領域

低位優先的字符串排序(LSD)

O(n x k)

O(n + k)

較短的定長字符串

高位優先的字符串排序(MSD)

O(n x k)

O(N+kk)

隨機字符串

三向字符串快速排序

O(NlogN)

W+logN

通用排序算法,特別適用于含有較長公共前綴的字符串數組

總結

基數排序是穩定、非比較排序,適合用于大數據范圍的。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2011-04-20 16:05:15

基數排序

2021-04-22 10:07:45

Java數據結構算法

2009-08-26 18:14:11

C#排序算法

2021-06-24 17:55:40

Python 開發編程語言

2015-03-19 15:13:20

PHP基本排序算法代碼實現

2009-09-08 17:20:01

C#排序算法

2014-05-30 09:08:42

排序算法測試

2025-10-17 01:55:00

排序算法快速排序Lomuto

2024-02-26 00:06:00

排序學習算法斯奇拉姆

2023-10-05 09:01:05

插入排序對象序列log2i

2018-11-01 13:49:23

桶排序排序面試

2021-01-19 07:02:26

算法數據結構堆排序

2011-04-20 15:20:03

快速排序

2011-04-20 15:06:44

堆排序

2023-03-06 08:10:52

數據結構算法數據

2021-02-01 10:17:14

編程C語言計算機

2011-04-20 14:07:37

冒泡排序

2011-04-20 14:19:00

希爾排序

2011-04-20 13:56:08

選擇排序

2022-03-12 20:12:08

希爾排序數組插入排序
點贊
收藏

51CTO技術棧公眾號

又骚又黄的视频| 青青草自拍偷拍| 日本蜜桃在线观看视频| 久久久高清一区二区三区| 国产日韩在线亚洲字幕中文| 久久97人妻无码一区二区三区| 久久97精品| 欧美日韩一区二区三区四区五区| 国产免费裸体视频| 成黄免费在线| 成人国产精品免费| 91精品免费久久久久久久久| 国内免费精品视频| 91精品国产视频| 亚洲人成网站免费播放| 天天操夜夜操很很操| 中文字幕影音在线| 一区二区三区视频在线看| 日本一区二区三区在线视频| 国产不卡精品视频| 日本色综合中文字幕| 国模私拍一区二区三区| 欧美性生交大片| 精品在线播放| 国产5g成人5g天天爽| 久久久精品国产sm调教网站| 国产中文精品久高清在线不| 日韩一级片在线观看| 国产wwwxx| 国内激情视频在线观看| 亚洲激情图片小说视频| 亚洲国产欧美不卡在线观看 | 国产日韩欧美三区| 欧美成人激情视频| 亚洲不卡在线播放| 日韩在线观看| 在线亚洲欧美视频| 四虎永久免费在线观看| 丝袜av一区| 日韩av在线天堂网| 人妻换人妻a片爽麻豆| 韩国三级大全久久网站| 欧美喷水一区二区| 亚洲无吗一区二区三区| 性欧美1819sex性高清| 精品久久中文字幕| 黄色免费福利视频| 午夜久久中文| 一本到三区不卡视频| 免费无码不卡视频在线观看| 国产理论在线| 欧美日韩在线第一页| 日韩欧美亚洲天堂| 性欧美18~19sex高清播放| 黄色精品在线看| 国内性生活视频| 最新欧美色图| 欧洲av一区二区嗯嗯嗯啊| 天美星空大象mv在线观看视频| av激情成人网| 欧美日韩黄色影视| 91日韩精品视频| 秋霞午夜一区二区三区视频| 日韩一区二区电影在线| 好吊操视频这里只有精品| 爱爱精品视频| 亚洲美女福利视频网站| 久久久久久国产免费a片| 成人毛片免费看| 爱福利视频一区| 欧美成人免费观看视频| 一区久久精品| 国产成人精品综合| 夜夜骚av一区二区三区| 国产麻豆精品在线观看| 狠狠色狠狠色综合人人| 久草在现在线| 亚洲欧美另类图片小说| 成年人午夜视频在线观看| 在线天堂新版最新版在线8| 日本精品一区二区三区四区的功能| 免费看a级黄色片| 国产精品视频一区二区三区| 精品国产伦一区二区三区观看方式| 久久人妻少妇嫩草av无码专区| 制服丝袜日韩| 欧美成人免费在线视频| 国产精品xxxx喷水欧美| 奇米777欧美一区二区| 99超碰麻豆| 国产九九在线| 亚洲夂夂婷婷色拍ww47 | 久久se这里有精品| 国产亚洲精品久久飘花| 1024国产在线| 天天综合色天天综合| 一区二区三区视频在线观看免费| 久久久久亚洲精品中文字幕| 亚洲精品一区中文| 精品国产乱码久久久久久鸭王1| 国产一区91| 1区1区3区4区产品乱码芒果精品| 五月婷婷丁香网| |精品福利一区二区三区| 成人毛片视频网站| 国模大尺度视频一区二区| 亚洲精品一区在线观看香蕉| 69xx绿帽三人行| 日本伊人午夜精品| 狠狠色噜噜狠狠色综合久| huan性巨大欧美| 欧美中文字幕一二三区视频| 国产精品成人免费一区久久羞羞| 欧美理论在线播放| 91高清视频免费观看| 精品毛片一区二区三区| 国产精品狼人久久影院观看方式| 一二三四视频社区在线| 精品一区二区三区视频在线播放| 亚洲人av在线影院| 亚州国产精品视频| 国产99精品国产| 伊人久久大香线蕉av一区| 欧美黑人疯狂性受xxxxx野外| 精品卡一卡二卡三卡四在线| 999精品在线视频| 捆绑调教一区二区三区| 欧洲亚洲一区二区三区四区五区| 99re6在线精品视频免费播放| 欧美一区二区精品久久911| 手机看片国产日韩| 日本欧美在线观看| 水蜜桃一区二区三区| 依依综合在线| 亚洲精品自拍偷拍| 欧美另类一区二区| 99久久精品免费看国产免费软件| 国产精品视频一二三四区| 国产精品毛片无码| 精品中文字幕在线| a天堂视频在线| 亚洲免费观看高清完整版在线 | 最近中文字幕mv在线一区二区三区四区 | 日韩美女视频免费在线观看| 天堂视频中文在线| 黑人巨大精品欧美一区二区三区| 日本在线不卡一区二区| 尤物在线精品| 免费看污久久久| 日韩不卡免费高清视频| 国产亚洲美女久久| 最近中文字幕在线观看视频| 亚洲国产成人一区二区三区| 国产又大又黄又猛| 婷婷综合网站| 91嫩草免费看| gogo高清在线播放免费| 亚洲国产精品悠悠久久琪琪| 久久久久久久久久久久久久av| 91亚洲国产成人精品一区二三| 日韩精品 欧美| 九九久久成人| 国产精品午夜国产小视频| 日本综合在线| 日韩精品一区二区三区在线 | 91久久精品国产91性色tv| 日韩女同一区二区三区| 精品制服美女丁香| 日本免费a视频| 亚洲欧洲美洲国产香蕉| 国产精品私拍pans大尺度在线| 免费av在线网站| 欧美xfplay| 岛国av中文字幕| 成人欧美一区二区三区1314| 亚洲精品久久一区二区三区777| 国产欧美日韩综合一区在线播放| 亚洲aⅴ天堂av在线电影软件| 精品国产三级| 69视频在线播放| 3p视频在线观看| 欧美草草影院在线视频| 久久精品视频7| 亚洲女与黑人做爰| asian性开放少妇pics| 久久99精品久久久久婷婷| 国产亚洲黄色片| 成人情趣视频网站| 电影午夜精品一区二区三区| 最新欧美电影| 欧美福利视频在线| 国产大学生校花援交在线播放| 6080亚洲精品一区二区| 9i看片成人免费看片| 中文字幕亚洲电影| 日韩av在线看免费观看| 国产乱码精品一区二区三 | 国产一区在线观看视频| 无码aⅴ精品一区二区三区浪潮| 欧美成人精品一区二区三区在线看| av一本久道久久波多野结衣| av在线播放一区| 午夜剧场成人观在线视频免费观看| 99re热久久这里只有精品34| 日韩av在线免费播放| 精品国产乱码一区二区三 | 亚洲乱码日产精品bd| 少妇人妻好深好紧精品无码| k8久久久一区二区三区| www.日本久久| 六月丁香综合在线视频| 免费观看精品视频| 亚洲黄色免费| 日韩一级特黄毛片| 欧美韩国日本在线观看| 欧美久久久久久久| 久久久久97| av在线不卡一区| 国产精品欧美一区二区三区不卡| 国产精品精品视频一区二区三区| 女人让男人操自己视频在线观看| 精品视频9999| caopo在线| 久久亚洲欧美日韩精品专区 | 99re精彩视频| 日韩国产精品91| 成人精品视频一区二区| 国产农村妇女精品一二区| 亚洲熟妇无码一区二区三区| 国产字幕视频一区二区| mm131午夜| 欧美在线黄色| 国产人妻互换一区二区| 婷婷亚洲最大| 秋霞在线一区二区| 无码一区二区三区视频| 国产a级片免费看| 日韩专区精品| 中文字幕人成一区| 亚洲女同一区| 樱空桃在线播放| 欧美极品一区二区三区| 97久久国产亚洲精品超碰热| 国产精品多人| 国产黄色片免费在线观看| 亚洲激情社区| av免费观看网| 久久亚洲不卡| 污视频免费在线观看网站| 免费的国产精品| 五月天婷婷影视| 国产精选一区二区三区| 香蕉在线观看视频| av在线播放一区二区三区| 久久人妻一区二区| 久久久久99精品一区| 色屁屁草草影院ccyy.com| 中文无字幕一区二区三区 | 91亚色免费| 99久久免费精品国产72精品九九| 成人18视频| 亚洲妇女av| 五月天亚洲综合小说网| 91精品秘密在线观看| 91免费国产精品| 国产美女一区| 尤物国产在线观看| 国产成人综合亚洲网站| 中文字幕影片免费在线观看| 国产亚洲综合av| 爱爱视频免费在线观看| 亚洲高清视频在线| 国产一级片免费视频| 在线播放欧美女士性生活| 亚洲免费成人在线| 亚洲欧洲在线看| av在线网址观看| 91精品国产色综合| 成人精品一区二区三区电影| 亚洲一区二区日本| 香蕉久久精品日日躁夜夜躁| 亚洲精品乱码久久久久久蜜桃91 | 久草视频在线看| 欧美成年人视频| 激情开心成人网| 91系列在线观看| 九九免费精品视频在线观看| 成人手机视频在线| 久久福利影视| 免费人成视频在线播放| 久久久久久久网| 免费在线观看av网址| 欧美视频第二页| 日本高清视频www| www.欧美三级电影.com| 日韩av一卡| 97操在线视频| 成人网18免费网站| 夫妻免费无码v看片| 韩国av一区二区三区四区| 精品无码一区二区三区| 一区二区三区中文在线观看| av手机天堂网| 亚洲精美色品网站| 色呦呦久久久| 成人午夜小视频| 国产亚洲一区二区三区啪| 日本福利视频一区| 国产一区999| 国产wwwwxxxx| 在线看一区二区| 午夜影院免费体验区| 欧美大奶子在线| 亚洲一区导航| 日韩欧美一区二区在线观看 | 欧美一区二三区| 国产96在线亚洲| 黄色录像特级片| 久草精品在线观看| 国产精品av久久久久久无| 欧美性猛交xxxx免费看久久久| 国产成人手机在线| 免费av一区二区| 精品精品视频| 91社在线播放| 精品夜夜嗨av一区二区三区| 国产三级黄色片| 欧美亚洲一区二区在线观看| 黄色在线播放| 国产99视频精品免视看7| 天天做夜夜做人人爱精品| 日韩黄色短视频| 豆国产96在线|亚洲| 欧美日韩精品在线观看视频| 欧美一区二区三区四区在线观看| 欧美性videos| 成人午夜高潮视频| 久久久久蜜桃| 无人码人妻一区二区三区免费| 亚洲天堂2014| www.97av| 久久久久女教师免费一区| 97se亚洲国产一区二区三区| a天堂资源在线观看| 粉嫩嫩av羞羞动漫久久久| 国产一级性生活| 日韩精品在线免费播放| 日本午夜大片a在线观看| 欧美国产视频在线观看| 欧美aaaaa成人免费观看视频| 欧洲美熟女乱又伦| 欧美丝袜丝交足nylons图片| 青青影院在线观看| 91国产在线播放| 怡红院精品视频在线观看极品| 亚洲图片欧美另类| 欧美午夜久久久| 成人免费黄色网页| 成人在线激情视频| 亚洲性感美女99在线| 久久午夜夜伦鲁鲁片| 91久久精品国产91性色tv| 日本在线免费看| 99久久综合狠狠综合久久止| 日韩香蕉视频| 国产又黄又粗视频| 日韩一级片网站| 欧美激情网站| 亚洲v欧美v另类v综合v日韩v| 国内一区二区在线| 五月天婷婷综合网| 在线播放精品一区二区三区| 91精品亚洲一区在线观看| 男人添女人荫蒂免费视频| 久久久久久久久久久久久久久99| 波多野结衣日韩| 欧美风情在线观看| 少妇精品久久久一区二区| 免费不卡av网站| 色综合天天狠狠| 在线中文字幕电影| 欧美日韩精品免费观看| 国产一区二区三区观看| 91video| 蜜月aⅴ免费一区二区三区 | 亚洲资源在线| 国产精品自拍片| 成人欧美一区二区三区| 五月婷婷狠狠干| 91精品视频在线看| 欧美亚洲一区| 久久久久久激情| 中文字幕亚洲综合久久筱田步美| 91成人精品在线| 在线观看免费视频高清游戏推荐| 亚洲一区欧美一区| 亚洲1卡2卡3卡4卡乱码精品| 国产欧美一区二区在线播放| 久久电影网电视剧免费观看| 91精品国产乱码在线观看|