主頁 > 後端開發 > 基數排序

基數排序

2023-07-07 07:40:50 後端開發

最近又有個奇奇怪怪的題目,資料為 \(n \le 1 \times 10^7\),并且還要用到排序,普通的排序肯定會超時,然后就發現了一種 \(O(n)\)

介紹

基數排序(Radix Sort)是桶排序的擴展,它是將整數按位數切割成不同的數字,然后按每個數位分別比較以此來排序,

說詳細點,也就是將所有數字統一為同樣的長度,數位較短的數前面補零,然后,從最低位開始,依次進行一次排序,然后從最低位排序一直到最高位排序完成以后, 數列就變成一個有序序列,

下面就用表格來做個詳細的解釋:

最開始的序列
214
135
413
435
533
345
532
421
654
431

既然從小到大排序,那么先排個位,

排完個位后
421
431
532
413
533
214
654
135
435
345

再排十位

排完十位后
413
214
421
431
532
533
135
435
345
654

最后再排百位

排完百位后
135
214
345
413
421
431
435
532
533
654

這便是最后的序列,

程序

1.查找陣列a的最大值,并求出最大值的位數,作為回圈的次數

2.統計所有數字某一位,用個桶 \(ct\) 來記個數,

3.然后做個前綴和ct[i]+=ct[i-1],那么每個數的某一位 \(x\) 的排名就應該在 \(ct[x-1]+1 \sim ct[x]\)

4.然后按照上一次排序的結果,利用 \(ct\) 逐一放進另一個陣列,再賦值到原來陣列上,

5.重復進行(2)(3)(4)的操作,

代碼

int maxbit(int a[],int n){
    int maxx=0;
    for(int i=1;i<=n;i++){
        int s=0,p=a[i];
        while(p!=0){
            p=p/10;
            s++;
        }
        maxx=max(maxx,s);
    }
    return maxx;
}
void Radix_Sort(int a[],int n){
    int m=maxbit(a,n),g=1;
    for(int t=0;t<=m;t++){
        for(int i=0;i<=9;i++)
            ct[i]=0;
        for(int i=1;i<=n;i++){
            int p=(a[i]/g)%10;
            ct[p]++;
        }
        for(int i=1;i<=9;i++) ct[i]+=ct[i-1];
        for(int i=n;i>=1;i--){
            int p=(a[i]/g)%10;
            rak[ct[p]]=a[i];
			ct[p]--;
        }
        for(int i=1;i<=n;i++){
        	a[i]=rak[i];
        }
        g=g*10;
    }
}
6666

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/556685.html

標籤:其他

上一篇:基數排序

下一篇:返回列表

標籤雲
其他(162128) Python(38266) JavaScript(25524) Java(18291) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7288) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4613) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) HtmlCss(1989) .NET技术(1985) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1882) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • 基數排序

    最近又有個奇奇怪怪的題目,資料為 $n \le 1 \times 10^7$,并且還要用到排序,普通的排序肯定會超時,然后就發現了一種 $O(n)$ ## 介紹 基數排序(Radix Sort)是桶排序的擴展,它是將整數按位數切割成不同的數字,然后按每個數位分別比較以此來排序。 說詳細點,也就是將所 ......

    uj5u.com 2023-07-07 07:40:50 more
  • 基數排序

    ## 前言 基數排序是一種非常快且好寫的排序。 以前一直以為基數排序就是桶排,現在發現自己很智慧,警鐘長鳴。 # 思想 基數排序是一個以桶排為基礎的排序。 桶排我就不多說了,簡單且 $O(n)$。 但是桶排有一個弊端,就是由于考試時空間限制是 $10^8$ 左右,可需要排序的資料是 $10^9$ 的 ......

    uj5u.com 2023-07-07 07:40:46 more
  • 2023 年 7 個適合初學者的 Vue.js 教程

    這個精心挑選的串列將幫助 Vue 初學者找到七個很棒的資源來開始學習 Vue。 我相信你來這里是為了尋找一些資源來開始學習 Vue.js 框架的奇妙旅程,無論是作為第一個工具還是你熟悉的其他框架的附加工具。不管怎樣,你很幸運,因為這就是我們將在這篇文章中介紹的內容。 隨著現代 Web 應用程式對更多 ......

    uj5u.com 2023-07-07 07:40:41 more
  • Servlet p7 ServletContext物件

    # ServletContext物件 **每一個 web 應用都有且僅有一個 ServletContext 物件**,又稱為 Application 物件,從名稱中可知,該物件是與應用程式相關的。在WEB 容器啟動時,會為每一個 WEB 應用創建一個對應的 ServletContex物件。 **該對 ......

    uj5u.com 2023-07-07 07:40:03 more
  • 基數排序

    ## 前言 基數排序是一種非常快且好寫的排序。 以前一直以為基數排序就是桶排,現在發現自己很智慧,警鐘長鳴。 # 思想 基數排序是一個以桶排為基礎的排序。 桶排我就不多說了,簡單且 $O(n)$。 但是桶排有一個弊端,就是由于考試時空間限制是 $10^8$ 左右,可需要排序的資料是 $10^9$ 的 ......

    uj5u.com 2023-07-07 07:00:09 more
  • SSO2.0 20-20230705

    ......

    uj5u.com 2023-07-06 09:39:00 more
  • SSO2.0 20-20230705

    ......

    uj5u.com 2023-07-06 09:32:13 more
  • 對敏感操作的二次認證 —— 詳解 Sa-Token 二級認證

    ### 一、需求分析 在某些敏感操作下,我們需要對已登錄的會話進行二次驗證。 比如代碼托管平臺的倉庫洗掉操作,盡管我們已經登錄了賬號,當我們點擊 **[洗掉]** 按鈕時,還是需要再次輸入一遍密碼,這么做主要為了兩點: 1. 保證操作者是當前賬號本人。 2. 增加操作步驟,防止誤洗掉重要資料。 這就 ......

    uj5u.com 2023-07-05 09:12:40 more
  • 對敏感操作的二次認證 —— 詳解 Sa-Token 二級認證

    ### 一、需求分析 在某些敏感操作下,我們需要對已登錄的會話進行二次驗證。 比如代碼托管平臺的倉庫洗掉操作,盡管我們已經登錄了賬號,當我們點擊 **[洗掉]** 按鈕時,還是需要再次輸入一遍密碼,這么做主要為了兩點: 1. 保證操作者是當前賬號本人。 2. 增加操作步驟,防止誤洗掉重要資料。 這就 ......

    uj5u.com 2023-07-05 09:11:38 more
  • 聊聊JVM虛方法表和方法呼叫

    > 作者:小牛呼嚕嚕 | [https://xiaoniuhululu.com](https://xiaoniuhululu.com/) > 計算機內功、原始碼決議、科技故事、專案實戰、面試八股等更多硬核文章,首發于公眾號「[小牛呼嚕嚕](https://www.xiaoniuhululu.com/i ......

    uj5u.com 2023-07-04 09:49:49 more