【排序算法】計數排序

當輸入的元素是 n 個 0 到 k 之間的整數時,它的運行時間是 Θ(n + k)。計數排序不是比較排序,排序的速度快于任何比較排序算法。

由于用來計數的數組B的長度取決于待排序數組中數據的范圍(等于待排序數組的最大值與最小值的差加上1),這使得計數排序對于數據范圍很大的數組,需要大量內存。計數排序是用來排序0到100之間的數字的最好的算法,但是它不適合按字母順序排序人名。但是,計數排序可以用在基數排序中的算法來排序數據范圍很大的數組。

測試代碼

#include <iostream>
using namespace std;void print(int a[], int sz) 
{for (int i = 0; i < sz; i++) cout << a[i] << " ";cout << endl;
}void CountingSort(int arr[], int sz) 
{int i, j, k;int idx = 0;int min, max;min = max = arr[0];for (i = 1; i < sz; i++) {min = (arr[i] < min) ? arr[i] : min;max = (arr[i] > max) ? arr[i] : max;}k = max - min + 1;int *B = new int[k];for(i = 0; i < k; i++)B[i] = 0;for(i = 0; i < sz; i++) B[arr[i] - min]++;  //記錄該元素的個數for(i = min; i <= max; i++)for(j = 0; j < B[i - min]; j++) arr[idx++] = i;print(arr, sz);delete[] B;
}int main()
{int a[] = { 5,9,3,9,10,9,2,4,13,10 };const size_t sz = sizeof(a) / sizeof(a[0]);print(a, sz);cout << "----------------------\n";CountingSort(a, sz);
}

參考資料

1.??漫畫:什么是計數排序??

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

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

相關文章

全套學習!mysql2003錯誤代碼

正文 在寫這個文章之前&#xff0c;我花了點時間&#xff0c;自己臆想了一個電商系統&#xff0c;基本上算是麻雀雖小五臟俱全&#xff0c;我今天就用它開刀&#xff0c;一步步剖析&#xff0c;我會講一下我們可能會接觸的技術棧可能不全&#xff0c;但是夠用&#xff0c;最后…

全套學習!mysql命令窗口執行sql文件

阿里P8級架構師核心理論落地篇 再造淘寶&#xff0c;貫穿全系&#xff0c;阿里團隊代碼落地&#xff0c;詳細每個版本迭代&#xff0c;拒絕2-3個月PPT架構師再造淘寶之咚寶-技術支撐-完整搭建DevOps再造淘寶之咚寶-統一規則-代碼規范落地解析再造淘寶之咚寶搭建基礎服務再造淘…

java招聘職位描述,附學習筆記+面試整理+進階書籍

面&#xff1a;為什么要使用雙親委派機制去加載類&#xff1f; 答&#xff1a;避免多份同樣字節碼的加載&#xff0c;浪費內存。 類的加載方式 隱式加載&#xff1a;new顯示加載&#xff1a;loadClass、forName等 類的裝載過程如下圖&#xff1a; 面&#xff1a;loadClass和…

94. 二叉樹的中序遍歷

給定一個二叉樹&#xff0c;返回它的中序 遍歷。 示例: 輸入: [1,null,2,3] 1 \ 2 / 3 輸出: [1,3,2] 進階: 遞歸算法很簡單&#xff0c;你可以通過迭代算法完成嗎&#xff1f; 來源&#xff1a;力扣&#xff08;LeetCode&#xff09; 鏈接&#xff1a;http…

判斷兩個結構體是否相等

一、判斷兩個結構體是否相等 判斷兩個結構體是否相等&#xff1a;重載操作符""不能用函數memcpy來判斷兩個結構體是否相等&#xff1a;memcmp函數是逐個字節進行比較的&#xff0c;而struct存在字節對齊&#xff0c;字節對齊時補的字節內容是隨機的&#xff0c;會產生…

java攔截器和過濾器,2021最新版!

正文 現在市面上的算法資料也五花八門&#xff0c;種類繁多&#xff0c;小編也整理了一份不同于市面且有意思的算法資料&#xff0c;不能說多全面&#xff0c;但是是小編花了很長時間整理歸納出來的&#xff0c;自我感覺還行。分享給同事及群里反響都不錯&#xff0c;所以小編…

java排列組合算法優缺點,一招徹底弄懂!

一. 為什么使用spring cloud alibaba 很多人可能會問&#xff0c;有了spring cloud這個微服務的框架&#xff0c;為什么又要使用spring cloud alibaba這個框架了&#xff1f; 最重要的原因在于spring cloud中的幾乎所有的組件都使用Netflix公司的產品&#xff0c;然后在其基礎…

001 出錯處理

函數strerror() 1.1 函數原型 char *strerror(int errnum)分析&#xff1a;此函數將errnum&#xff08;它通常就說errno值&#xff09;映射為一個出錯信息字符串&#xff0c;并返回錯誤此字符串 。 1.2 代碼清單 #include <stdio.h> #include <string.h> #inclu…

java接口作用和好處,持續更新大廠面試筆試題

業界常用的服務注冊與發現組件對比 了解服務注冊與發現的基本原理后&#xff0c;如果你要在項目中使用服務注冊與發現組件&#xff0c;當面對眾多的開源組件該如何進行技術選型&#xff1f; 在互聯網公司里&#xff0c;有研發實力的大公司一般會選擇自研或者基于開源組件進行…

第七章 進程環境 | 001 命令形參、gcc與g++的使用

命令形參 命令行參數是使用main()函數參數來處理的&#xff0c;其中&#xff0c;argc是指傳入參數的個數&#xff0c;argv[]是一個指針數組&#xff0c;指向傳遞給程序的每個參數。 應當指出的是&#xff0c; argv[0]存儲程序的名稱&#xff0c;argv[1]是一個指向第一個命令行…

java接口實例化對象和類實例化對象,附贈課程+題庫

面試整體事項 簡歷要準備好&#xff0c;聯系方式一定要正確清晰醒目&#xff0c;項目經歷按照時間倒序闡述&#xff0c;注意描述自己在項目中承擔的職責&#xff0c;簡歷的模板盡量選擇簡潔的&#xff0c;畢竟程序員大部分還是喜歡簡單明了的。推薦boss直聘&#xff0c;我覺得…

java接口開發規范,干貨滿滿

第一個模塊&#xff1a;數據庫 1.1 騰訊數據庫面試問題 解釋ACID四大特性 原子性的底層實現 數據庫宕機后恢復的過程 如何保證事務的ACID特性 MySQL日志類型 這5個題目相對來說是比較普遍的&#xff0c;這里我就不一一給出答案了&#xff0c;給大家看下我的那個數據庫學…

001 makefile的使用

標題 標題 當我們有多個源程序時&#xff0c;用gcc每個都編譯&#xff0c;這樣我們沒有修改過的源文件也得重新編譯一次&#xff0c;很麻煩&#xff0c;這時候寫makefile就派上了用場&#xff0c;可以大大的提高我們的編碼和調試速度。( 注意&#xff1a;頭文件并不參加鏈接和…

java接口的修飾符可以為,附架構師必備技術詳解

第一章 MySQL入門與初步 1.1 MYSQL 簡介 1.2 關系數據庫管理系統 1.3 MYSQL 使用的 SQL 語言 1.4 MYSQL 數據處理 第二章 MySQL的安裝 2.1 MYSQL 系統的安裝布局 2.2 安裝 MYSQL 系統的分發 2.3 安裝后期的的設置與測試 2.4 系統的升級 2.5 在同一臺機器上運行多個 MYSQL 服務…

ALSA【一】

ALSA是Advanced Linux Sound Architecture 的縮寫&#xff0c;目前已經成為了linux的主流音頻體系結構。 在內核設備驅動層&#xff0c;ALSA提供了alsa-driver&#xff0c;同時在應用層&#xff0c;ALSA為我們提供了alsa-lib&#xff0c;應用程序只要調用alsa-lib提供的API&…

java接口的定義與實現,學習路線+知識點梳理

Spring框架自誕生以來一直備受開發者青睞&#xff0c;有人親切的稱之為&#xff1a;Spring 全家桶。Spring更是避免了重復造輪子的工作并跟隨著互聯網行業的發展做出不斷的更新&#xff0c;很多研發人員把spring看作心目中最好的Java項目&#xff0c;沒有之一。 **可以毫不夸張…

第3章 文件IO | 001 文件描述符

概述 在Linux系統中一切皆可以看成是文件&#xff0c;文件又可分為&#xff1a;普通文件、目錄文件、鏈接文件和設備文件。文件描述符&#xff08;file descriptor&#xff09;是內核為了高效管理已被打開的文件所創建的索引&#xff0c;其是一個非負整數&#xff08;通常是小整…

java提取圖片中的文字,深入分析

第一個暴擊&#xff1a;Spring 上一份Spring的手繪思維腦圖&#xff08;就像是個知識大綱總結&#xff09;&#xff0c;預覽一下Spring的知識點&#xff0c;心里有個譜。不過這邊我是采用的截圖方式&#xff0c;為了把全部的內容都截取出來&#xff0c;所以整個就比較小&#…

Leetcode | 513. Find Bottom Left Tree Value

題目&#xff1a;翻轉二叉樹 方法①&#xff1a;深度優先遍歷(鏈接) /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ cla…

java基礎入門傳智播客答案,GitHub已標星16k

選擇 在現在這個浮躁而又拜金的社會&#xff0c;我相信很多人做技術并非出于熱愛&#xff0c;只是被互聯網的高薪吸引&#xff0c;畢竟技術崗位非常枯燥&#xff0c;不僅要面對奇奇怪怪的需求&#xff0c;還要不停的充實自己避免被淘汰。所以想要吃好技術這碗飯并不容易。 我…