Java實現基數排序

来源:https://www.cnblogs.com/miwujun/archive/2020/04/11/12680876.html
-Advertisement-
Play Games

基本介紹 基數排序屬於“分配式排序”,它通過元素的各個位的值,將元素放置對應的“桶”中 基數排序屬於穩定性排序,效率高,但是過多的元素會出現虛擬機運行記憶體的不足(千萬個元素) 基本思想 把元素統一為同樣長度的數組長度 元素較短的數前面補0,比如(1 15 336 看成 001 015 336) 然後 ...


  • 基本介紹

基數排序屬於“分配式排序”,它通過元素的各個位的值,將元素放置對應的“桶”中

基數排序屬於穩定性排序,效率高,但是過多的元素會出現虛擬機運行記憶體的不足(千萬個元素)

  • 基本思想

 

把元素統一為同樣長度的數組長度   元素較短的數前面補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;
   }   }
 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 全民閱讀的時代已經來臨,目前使用讀書軟體的用戶數2.1億,日活躍用戶超過500萬,其中19-35歲年輕用戶占比超過60%,本科及以上學歷用戶占比高達80%,北上廣深及其他省會城市/直轄市用戶占比超過80%。**本人習慣使用微信讀書,為了方便整理書籍和導出筆記,便開發了這個小工具。** ...
  • 前言 在【JAVA進階架構師指南】系列二和三中,我們瞭解了JVM的記憶體模型以及類載入機制,其中在記憶體模型中,我們說到,從線程角度來說,JVM分為線程私有的區域(虛擬機棧/本地方法棧/程式計數器)和線程公有區域(方法區和java堆),其中線程私有區域記憶體隨著線程的結束而跟著被回收,GC主要關註的是堆和 ...
  • 靈魂拷問:在不重啟服務的前提下,如何讓配置修改生效的呢?有什麼奇技淫巧嗎? 靈魂拷問:在 Java 項目中,總能看到以 .properties 為尾碼的文件蹤影,這類配置文件是怎麼載入的呢? 項目研發過程中,總會遇到一些經常改變的參數,比如要連接的資料庫的連接地址、名稱、用戶名、密碼;再比如訪問三方 ...
  • 1、什麼是字元串? Go語言中字元串是一個位元組切片。把內容放在雙引號""之間,我們可以創建一個字元串,讓我們來看一下創建並列印字元串的簡單示例。 package main import ( "fmt" ) func main() { str := "hello golang" fmt.Println ...
  • 一、Java註解 1.引入起始:Java5.0開始引入; 2.該功能可用於類、構造方法、成員變數、方法、參數 3.註解功能的影響範圍:不影響程式的正常執行,但是會對編譯器等輔助工具產生影響。 4.定義:註解又可以稱為標註,是程式的元數據,也是程式代碼的標記。 5.獲取方式:在編譯、載入類和運行時。 ...
  • PHP常用設計模式詳解 單例模式: php交流群:159789818 特性:單例類只能有一個實例 類內__construct構造函數私有化,防止new實例 類內__clone私有化,防止複製對象 設置一個$instance私有靜態屬性,為了保存當前類的實例 設置一個getInstance公有方法,為 ...
  • 寫在前面 在JDK中,提供了這樣一種功能:它能夠將複雜的邏輯拆分成一個個簡單的邏輯來並行執行,待每個並行執行的邏輯執行完成後,再將各個結果進行彙總,得出最終的結果數據。有點像Hadoop中的MapReduce。 ForkJoin是由JDK1.7之後提供的多線程併發處理框架。ForkJoin框架的基本 ...
  • 線程池原理和使用在面試中被高頻問到,比如阿裡的面試題。下麵我們針對問題來進行回答。 為什麼要使用線程池? 線程池的使用場景有2: 1, 高併發場景:比如tomcat的處理機制,內置了線程池處理http請求; 2,非同步任務處理:比如spring的非同步方法改造,增加@Asyn註解對應了一個線程池; 使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...