排序--計數排序

一,引言

計數排序是一種針對整數數據的高效排序算法。其主要流程可分為三個步驟:首先計算整數數據的數值范圍;接著按大小順序統計各數值的出現次數;最后根據統計結果輸出排序后的數據序列。

二,求最值

遍歷現有數據,獲取最大值和最小值。通過計算兩者差值確定數據區間范圍,據此確定統計次數數組的分配空間大小。舉個例子:

經過遍歷得到最小值為1,最大值為9。用最大值減去最小值再加1,可得出數據范圍為1到9,共包含9個不同數值。因此需要分配能存儲9個整型數據的空間。代碼如下:

void sort(int* arr, int n)
{int min = arr[0];int max = arr[0];for (int i = 1; i < n; i++){if (arr[i] < min){min = arr[i];}if (arr[i] > max){max = arr[i];}}int* p = (int*)calloc((max - min + 1), sizeof(int));
}

三,統計次數

遍歷原數組時,先用最小值調整每個元素,將其轉換為計數數組的索引位置。隨后在計數數組對應的索引位置進行累加操作。完成所有元素的遍歷后,即可生成最終的計數數組。舉個例子:

每一次箭頭的指向代表進行一次加加操作。代碼實現:
?

for (int i = 0; i < n; i++){p[a[i] - min]++;}

四,排序

統計數組的每一個數據加上min就得出原數組的值。統計數組的順序就是原數組排序后的相對位置。舉個例子:

代碼實現:

int j = 0;for (int i = 0; i < (max-min+1); i++){while (j[i]--){a[j++] = i + min;}}

五,總結

?計數排序的時間復雜度為ON遠遠小于一般排序,且該排序為穩定排序。但是計數排序要求輸入數據必須是確定范圍的整數。浮點數或字符串等數據類型無法直接使用該算法。當數據范圍k遠大于元素數量n時,需消耗O(k)額外空間存儲計數數組。若k過大(如排序少量超大整數),會造成顯著的空間浪費。對于動態范圍或未知范圍的數據,需先遍歷確定范圍值,增加預處理開銷。此過程可能影響整體效率。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/83619.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/83619.shtml
英文地址,請注明出處:http://en.pswp.cn/web/83619.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes安全機制深度解析(四):動態準入控制和Webhook

#作者&#xff1a;程宏斌 文章目錄 動態準入控制什么是準入 Webhook&#xff1f; 嘗試準入Webhook先決條件編寫一個準入 Webhook 服務器部署準入 Webhook 服務即時配置準入 Webhook對 API 服務器進行身份認證 Webhook 請求與響應Webhook 配置匹配請求-規則匹配請求&#xff1a…

WDK 10.0.19041.685,可在32位win7 sp1系統下搭配vs2019使用,可以編譯出xp驅動。

(14)[驅動開發]配置環境 VS2019 WDK10 寫 xp驅動 (14)[驅動開發]配置環境 VS2019 WDK10 寫 xp驅動_microsoft visual 2019 wdk-CSDN博客文章瀏覽閱讀3k次&#xff0c;點贊8次&#xff0c;收藏17次。本文介紹了如何在VS2019環境下安裝和配置Windows Driver Kit(WDK)&#xff0…

論壇系統自動化測試

1、項目背景與測試目標 系統定位 論壇系統作為典型的高并發Web應用&#xff0c;需支持用戶注冊、登錄、發帖、評論、私信及個人中心管理等核心功能&#xff0c;是用戶公開交流與信息共享的核心平臺。其穩定性與響應效率直接影響用戶體驗及平臺活躍度。 測試必要性 功能可靠性&…

ChipWhisperer教程(一)

一、ChipWhisperer介紹 ChipWhisperer 是一個完整的開源工具鏈&#xff0c;用于學習嵌入式設備上的側信道攻擊并驗證這些設備的側信道抗性。ChipWhisperer主要用于功耗分析&#xff0c;利用設備功耗泄露的信息進行攻擊&#xff0c;也可用于故障攻擊&#xff08;電壓和時鐘毛刺…

【持續更新】計算機網絡試題

問題1 請簡要說明TCP/IP協議棧的四層結構&#xff0c;并分別舉出每一層出現的典型協議或應用。 答案 應用層&#xff1a;ping,telnet,dns 傳輸層&#xff1a;tcp,udp 網絡層&#xff1a;ip,icmp 數據鏈路層&#xff1a;arp,rarp 問題2 下列協議或應用分別屬于TCP/IP協議…

短劇系統開發:打造高效、創新的短視頻娛樂平臺 - 從0到1的完整解決方案

一、短劇市場迎來爆發式增長 - 不容錯過的萬億級藍海 隨著5G技術的普及和移動互聯網的深度滲透&#xff0c;短劇市場正在經歷前所未有的爆發式增長。根據權威機構艾瑞咨詢最新發布的《2023年中國網絡短劇行業發展報告》顯示&#xff1a; 市場規模&#xff1a;2023年中國短劇市…

ChipWhisperer教程(三)

——CW305目標板的波形采集 一、目標板介紹 CW305 是一款獨立的 FPGA 目標板&#xff0c;搭載的FPGA芯片為Xilinx Artix-7系列。 它具有與 FPGA 通信的 USB 接口、為 FPGA 提供時鐘的外部 PLL、編程 VCC-INT 電源以及用于故障注入環境的二極管保護。 CW305 電路板有多種配置&…

django中如何解析content-type=application/json的請求

django中如何解析content-typeapplication/json的請求 本文由「大千AI助手」原創發布&#xff0c;專注用真話講AI&#xff0c;回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我&#xff0c;一起撕掉過度包裝&#xff0c;學習真實的AI技術&#xff01; 往期文章回顧: …

Chainlink VRF 深度解析與實戰

背景 在區塊鏈的去中心化應用中&#xff0c;隨機性是一個常見但難以實現的需求。例如&#xff0c;區塊鏈游戲需要隨機決定戰斗結果&#xff0c;NFT 項目需要隨機分配稀有屬性&#xff0c;去中心化抽獎需要公平選擇獲獎者。然而&#xff0c;傳統的鏈上隨機數生成方法&#xff0…

7. TypeScript接口

TypeScript 中的接口&#xff08;Interfaces&#xff09;用于定義對象的結構。它們允許開發者指定一個對象應具有哪些屬性以及這些屬性的類型。接口有助于確保對象遵循特定的結構&#xff0c;從而在整個應用中提供一致性&#xff0c;并提升代碼的可維護性。 一、認識接口 Typ…

UE 新版渲染器輸出視頻

安裝包解壓到C盤 打開UE插件 Movie Render Queue 進入UE引擎在項目設置找到 libx264 aac mp4 影片渲染隊列調用出 命令行編碼器安裝包路徑&#xff0c;序列輸出路徑&#xff0c;定序器不能有中文

基于用戶的協同過濾推薦算法實現(Java電商平臺)

在電商平臺中&#xff0c;基于用戶的協同過濾推薦算法是一種常見的推薦系統方法。它通過分析用戶之間的相似性來推薦商品。以下是一個簡單的實現思路和示例代碼&#xff0c;使用Java語言。 實現思路 數據準備&#xff1a;收集用戶的評分數據&#xff0c;通常以用戶-商品評分矩…

LeetCode - 904. 水果成籃

題目 904. 水果成籃 - 力扣&#xff08;LeetCode&#xff09; 思路 題目本質 你有一個整數數組&#xff0c;每個元素代表一種水果。你只能用兩個籃子&#xff0c;每個籃子只能裝一種水果。你要在數組中找一個最長的連續子數組&#xff0c;這個子數組里最多只包含兩種不同的…

發現 Kotlin MultiPlatform 的一點小變化

最近發現 Kotlin 官方已經開始首推 Idea 的社區版的 KMP 插件了. 以前有網頁創建 KMP 的項目的文檔也消失了. 雖然有 Android Studio 的選項. 但是卻不是在默認的位置上了. 足以說明官方是有意想讓大家直接使用 Idea 社區版或者專業版 所以我直接在社區版上安裝 KMP 插件. 嘗試…

【Photoshop】金屬字體制作

新建一個空白項目&#xff0c;選擇橫排文字工具&#xff0c;輸入想要的文件建立文字圖層 選擇橫排文字工具選擇出文字內容&#xff0c;在通知欄出點擊’拾色器‘&#xff0c;設置好需要的文字顏色 圖層面板右下角點擊‘添加圖層樣式’&#xff0c;選擇斜面和浮雕 樣式設置為內斜…

centos 7.9 升級ssh版本 7.4p1 升級到 8.2p1

centos 7.9 升級ssh版本 7.4p1 升級到 8.2p1 1、安裝包下載2、安裝telnet3、安裝openssl-OpenSSL_1_1_1f.tar.gz4、安裝openssh-8.2p1.tar.gz5、修改ssh服務的相關配置文件6、確定可以ssh連接服務器后&#xff0c;卸載telnet&#xff0c;因為telnet不安全 本文是離線環境下升級…

stm32---dma串口發送+fifo隊列框架

之前分享了一個關于gd32的fifo框架&#xff0c;這次就用stm32仿照寫一個&#xff0c;其實幾乎一樣&#xff0c;這次說的更詳細點&#xff0c;我全文都寫上了注釋&#xff0c;大家直接cv模仿我的調用方式即可 uasrt.c #include "stm32f10x.h" // D…

【生產就曲篇】讓應用可觀測:Actuator監控端點與日志最佳實踐

摘要 本文是《Spring Boot 實戰派》系列的終章&#xff0c;我們將探討如何讓應用真正達到**“生產就緒” (Production-Ready)** 的標準。文章的核心是可觀測性 (Observability)&#xff0c;即從外部了解一個系統內部運行狀態的能力。 我們將深度挖掘 Spring Boot Actuator 的…

操作系統知識(1)

操作系統的分類總結 1、批處理操作系統:單道批處理和多道批處理(主機與外設可并行) 2、分時操作系統:一個計算機系統與多個終端設備連接。將CPU的工作時間劃分為許多很短的時間片&#xff0c;輪流為各個終端的用戶服務。 3、實時操作系統:實時是指計算機對于外來信息能夠以足…

一.Sharding分庫分表-基因法+自定義多key分片實現多字段查詢

前言 當下遇到這樣一個場景&#xff0c;由于訂單數據量達到千萬級別&#xff0c;采用分庫分表進行優化&#xff0c;根據訂單的熱查條件&#xff1a;order_no訂單編號進行分表&#xff0c;但是這樣帶來一個問題&#xff0c;用戶查詢自己的訂單怎么查&#xff1f;由于分片鍵使用…