/*计数排序(要求数据相对较为集中,否则会浪费大量的额外的空间)*/
#include <iostream>
using namespace std;
void funca(int *a,int length)
{
if(a==NULL || length<=0) return ;
int Max=0,Min=0;
for(int i=1;i<length;i++){
if(a[i]<a[Min]){
Min=i;
}
if(a[i]>a[Max]){
Max=i;
}
}
int *arr = new int[a[Max]-a[Min]+1];
for(int i=0;i<(a[Max]-a[Min]+1);i++){
arr[i]=0;
}
for(int i=0;i<length;i++){
arr[a[i]-a[Min]]++;
}
int k=0,m;
int min_value=a[Min];
int max_value=a[Max];
for(int i=0;i<(max_value-min_value+1);i++){
while(arr[i]>0){
a[k++]=i+min_value;
arr[i]--;
}
}
delete arr;
arr=NULL;
}
int main(){
int arr[] = {10,28,10,9,8,9,4,28,7,10};
funca(arr,sizeof(arr)/sizeof(arr[0]));
for(int i=0;i<sizeof(arr)/sizeof(arr[0]);i++){
cout<<arr[i]<<" ";
}
cout<<endl;
return 0;
}