排序演算法__計數排序

Enjoy_process發表於2019-03-08

                                                排序演算法__計數排序

 

 

一、簡介

計數排序是一個非基於比較的排序演算法,它的優勢在於在對一定範圍內的整數排序。

 

二、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;
}

三、時間複雜度

它的複雜度為Ο(n+k)O(n+k)(其中k是整數的範圍),快於任何比較排序演算法,是一種犧牲空間換取時間的做法。然而當O(k)>O(n*log(n))的時候其效率反而不如基於比較的排序(基於比較的排序的時間複雜度在理論上的下限是O(nlogn)), 如歸併排序,堆排序)

相關文章