Java語言實現(xiàn)基數(shù)排序代碼分享
算法思想:依次按個位、十位...來排序,每一個pos都有分配過程和收集過程,array[i][0]記錄第i行數(shù)據(jù)的個數(shù)。
package sorting; /** * 基數(shù)排序 * 平均O(d(n+r)),最好O(d(n+r)),最壞O(d(n+r));空間復雜度O(n+r);穩(wěn)定;較復雜 * d為位數(shù),r為分配后鏈表的個數(shù) * @author zeng * */ public class RadixSort { //pos=1表示個位,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ù)的個數(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; // 復位,下一個pos時還需使用 } } } 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 + " "); } }
關注一下運行結果:
總結
以上就是本文關于Java語言實現(xiàn)基數(shù)排序代碼分享的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他Java相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關文章
詳解JAVA使用Comparator接口實現(xiàn)自定義排序
這篇文章主要介紹了JAVA使用Comparator接口實現(xiàn)自定義排序,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03解決@CachePut設置的key值無法與@CacheValue的值匹配問題
這篇文章主要介紹了解決@CachePut設置的key的值無法與@CacheValue的值匹配問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12java多次嵌套循環(huán)查詢數(shù)據(jù)庫導致代碼中數(shù)據(jù)處理慢的解決
這篇文章主要介紹了java多次嵌套循環(huán)查詢數(shù)據(jù)庫導致代碼中數(shù)據(jù)處理慢的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Spring Boot使用模板freemarker的示例代碼
本篇文章主要介紹了Spring Boot使用模板freemarker的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解
這篇文章主要介紹了SPRINGBOOT讀取PROPERTIES配置文件數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12