這篇文章主要介紹Java語言怎么實(shí)現(xiàn)基數(shù)排序,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
站在用戶的角度思考問題,與客戶深入溝通,找到輝南網(wǎng)站設(shè)計(jì)與輝南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋輝南地區(qū)。
算法思想:依次按個(gè)位、十位...來排序,每一個(gè)pos都有分配過程和收集過程,array[i][0]記錄第i行數(shù)據(jù)的個(gè)數(shù)。
package sorting; /** * 基數(shù)排序 * 平均O(d(n+r)),最好O(d(n+r)),最壞O(d(n+r));空間復(fù)雜度O(n+r);穩(wěn)定;較復(fù)雜 * d為位數(shù),r為分配后鏈表的個(gè)數(shù) * @author zeng * */ public class RadixSort { //pos=1表示個(gè)位,pos=2表示十位 public static int getNumInPos(int num, int pos) { int tmp = 1; for (int i = 0; i < pos - 1; i++) { tmp *= 10; } return (num / tmp) % 10; } //求得最大位數(shù)d public static int getMaxWeishu(int[] a) { int max = a[0]; for (int i = 0; i < a.length; i++) { if (a[i] > max) max = a[i]; } int tmp = 1, d = 1; while (true) { tmp *= 10; if (max / tmp != 0) { d++; } else break; } return d; } public static void radixSort(int[] a, int d) { int[][] array = new int[10][a.length + 1]; for (int i = 0; i < 10; i++) { array[i][0] = 0; // array[i][0]記錄第i行數(shù)據(jù)的個(gè)數(shù) } for (int pos = 1; pos <= d; pos++) { for (int i = 0; i < a.length; i++) { // 分配過程 int row = getNumInPos(a[i], pos); int col = ++array[row][0]; array[row][col] = a[i]; } for (int row = 0, i = 0; row < 10; row++) { // 收集過程 for (int col = 1; col <= array[row][0]; col++) { a[i++] = array[row][col]; } array[row][0] = 0; // 復(fù)位,下一個(gè)pos時(shí)還需使用 } } } public static void main(String[] args) { int[] a = { 49, 38, 65, 197, 76, 213, 27, 50 }; radixSort(a, getMaxWeishu(a)); for (int i : a) System.out.print(i + " "); } }
關(guān)注一下運(yùn)行結(jié)果:
以上是“Java語言怎么實(shí)現(xiàn)基數(shù)排序”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!