排序演算法__計數排序
排序演算法__計數排序
一、簡介
計數排序是一個非基於比較的排序演算法,它的優勢在於在對一定範圍內的整數排序。
二、C++實現
#include<iostream>
using namespace std;
const int N=1000;
countSort(int a[],int n,int Max)
{
int *tmp=new int[Max+1];
for(int i=0;i<=Max;i++) tmp[i]=0;//初始化:數字i出現的次數初始化為0
for(int i=0;i<n;i++) tmp[a[i]]++;//計數 數a[i]出現的次數加一
for(int i=0,j=0;i<=Max;i++)//排序
while((tmp[i]--)>0)
a[j++]=i;
}
int main()
{
int n=10;
int a[N]={2,45,1,56,12,57,25,89,3,23};
cout<<"排序前:";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
countSort(a,n,89);
cout<<endl<<"排序後:";
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
三、時間複雜度
它的複雜度為(其中k是整數的範圍),快於任何比較排序演算法,是一種犧牲空間換取時間的做法。然而當的時候其效率反而不如基於比較的排序(基於比較的排序的時間複雜度在理論上的下限是), 如歸併排序,堆排序)
相關文章
- 【資料結構與演算法】非比較排序(計數排序、桶排序、基數排序)資料結構演算法排序
- 排序演算法__基數排序排序演算法
- 計數排序、桶排序和基數排序排序
- JavaScript計數排序演算法JavaScript排序演算法
- 計數排序vs基數排序vs桶排序排序
- Java排序之計數排序Java排序
- 計數排序的原址排序排序
- 演算法系列:計數排序演算法排序
- 非交換排序-計數排序和桶排序排序
- 計數排序排序
- 排序演算法-N個正整數排序排序演算法
- 【資料結構與演算法】內部排序之五:計數排序、基數排序和桶排序(含完整原始碼)資料結構演算法排序原始碼
- 看動畫學演算法之:排序-基數排序動畫演算法排序
- 【演算法】基數排序演算法排序
- 基於桶的排序之計數排序排序
- 資料結構與演算法——排序演算法-基數排序資料結構演算法排序
- (戀上資料結構筆記):計數排序、基數排序 、桶排序資料結構筆記排序
- 排序演算法__桶排序排序演算法
- 排序演算法__快速排序排序演算法
- 排序演算法__希爾排序排序演算法
- 排序演算法__堆排序排序演算法
- 排序演算法:快速排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 排序演算法-堆排序排序演算法
- 排序演算法-快速排序排序演算法
- 排序演算法 - 堆排序排序演算法
- 排序演算法——快速排序排序演算法
- 排序演算法 - 快速排序排序演算法
- 經典十大排序演算法(含升序降序,基數排序含負數排序)排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- 演算法之常見排序演算法-氣泡排序、歸併排序、快速排序演算法排序
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 排序演算法之 '快速排序'排序演算法
- 排序演算法–氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法__選擇排序排序演算法
- 排序演算法__歸併排序排序演算法