第三章:查詢與排序(下)----------- 3.19 計數排序
計數排序
一句話:用輔助的陣列對陣列中出現的數字計數,元素轉下標,下標轉元素。
假設所有元素均大於等於0,依次掃描原陣列,將元素值k記錄在輔助陣列的k位上。
依次掃描輔助陣列,如果為1,將其插入目標是陣列的空白位處。
問題:
-----重複元素
-----有負數
優點:快;(可以說是最快的排序演算法,沒有比較,直接對映)
缺點:資料範圍很大,比較稀疏,會導致輔助空間很大,也稀疏,造成空間的浪費。
#include<iostream>
using namespace std;
void countSort(int arr[],int length){
int maxL=arr[0];
//求原陣列元素中的最大值
for(int i=1;i<length;i++){
maxL=max(maxL,arr[i]);
}
int helper[maxL+1];
//輔助陣列賦初值為0
for(int i=0;i<=maxL;i++){
helper[i]=0;
}
//遍歷原陣列,元素轉下標,若出現,則對應位置元素+1
for(int i=0;i<length;i++){
helper[arr[i]]++;
}
int current=0;//資料回填的位置
for(int i=1;i<=maxL;i++){
while(helper[i]>0){
arr[current++]=i; //下標轉元素
helper[i]--;
}
}
}
int main(){
int arr[]={6,2,5,8,2,1,9,5,6};
int len= 9;
countSort(arr,len);
for(int i=0;i<len;i++){
cout<<arr[i]<<" ";
}
return 0;
}
時間複雜度:掃描一次source,掃描一次helper,複雜度為N+k;
空間複雜度:輔助空間k,k=maxOf(source);
非原址排序;
如果要優化一下空間,可用求minOf(source),helper的長度為max-min+1,這樣能短點;
計數有缺陷,資料較為密集或者範圍較小是,適用。
結果:
NOTICE:
計數排序,適用資料範圍小,且範圍已知。
相關文章
- 第三章:查詢與排序(下)----------- 3.21基數排序排序
- 第三章:查詢與排序(下)----------- 3.20桶排序排序
- 第三章:查詢與排序(下)----------- 3.27 用計數排序解決員工年齡問題排序
- 第三章:查詢與排序(下)----------- 3.28 特殊排序(利用sort函式)排序函式
- 第三章:查詢與排序(下)----------- 3.14 逆序對個數排序
- 第三章:查詢與排序(下)----------- 3.16堆的概念及堆排序思路排序
- 查詢與排序05,氣泡排序排序
- 查詢與排序04,插入排序排序
- 查詢與排序03,選擇排序排序
- 查詢與排序02,折半查詢排序
- 第三章:查詢與排序(下)----------- 3.15基礎學習_樹、二叉樹、堆排序排序二叉樹
- 第三章 :查詢與排序-------3.2你需要掌握的快速排序演算法排序演算法
- 第三章:查詢與排序(下)----------- 3.22 總結:10種排序演算法的對比分析排序演算法
- 第三章:查詢與排序(下)----------- 3.23 相關題解:排序陣列中找和的因子排序陣列
- 第二章 :查詢與排序---------遞迴、查詢與排序補充排序遞迴
- 第二章 :查詢與排序-------希爾排序排序
- 第三章 :查詢與排序-------3.7分治模式的完美詮釋_歸併排序排序模式
- 第三章:查詢與排序(下)----------- 3.12 實踐_最小可用id是多少排序
- 第三章:查詢與排序(下)----------- 3.9 最快效率求出亂序陣列中第k小的數排序陣列
- 第三章:查詢與排序(下)------------- 3.8題解_調整陣列順序-奇數在左偶數在右排序陣列
- 排序和查詢排序
- 第三章:查詢與排序(下)----------- 3.11 趣味擴充_尋找發帖水王排序
- 第三章:查詢與排序(下)----------- 3.29 題解:判斷陣列的包含問題排序陣列
- 第三章:查詢與排序(下)----------- 3.10 實戰解題_哪個數字超過了一半?排序
- 計數排序、桶排序和基數排序排序
- 第三章 :查詢與排序(下)-------3.1分治法介紹及關鍵點解析排序
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- SQL Cookbook—查詢、排序SQL排序
- 計數排序vs基數排序vs桶排序排序
- 第三章 :查詢與排序-------3.5快排之三指標分割槽法排序指標
- 第三章 :查詢與排序-------3.6快排在工程實踐中的優化排序優化
- Java排序之計數排序Java排序
- 計數排序的原址排序排序
- 三言兩語說清【基數排序】與【計數排序】排序
- 非交換排序-計數排序和桶排序排序
- 資料庫排序查詢資料庫排序
- 第三章 :查詢與排序-------3.4快排之雙向掃描分割槽法排序
- select查詢之二:分組與排序排序