#include <stdlib.h>
#include <stdio.h>
//計數排序
int countSort(int arr[],int len,int min,int max){
int bucketsLen=max-min+1;
int* buckets=malloc(sizeof(int)*bucketsLen);
int* bucketsRear=buckets+bucketsLen;
int*rear=arr+len;
int* p=arr;
while (p<rear)
{
buckets[*p++-min]++;
}
p=buckets;
//遍歷buckets
while (p<bucketsRear)
{
//若存在,取數
if(*p>0){
int* q=arr;
while(*p>arr-q){
*arr++=p-buckets+min;
}
}
p++;
}
return 0;
}
void print(int arr[],int len){
printf("\n");
for(int i=0;i<len;i++)
printf("%d ",arr[i]);
printf("\n");
}
int main(int argc,char** argv){
int arr[]={1,12,2,3,2,2,8,10,11,4,5,6,3};
int len=sizeof(arr)/sizeof(int);
print(arr,len);
countSort(arr,len,1,20);
print(arr,len);
return 0;
}