#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 15
void item_arr(int *arr, unsigned int arr_lenght);
int arr_max(int *arr, unsigned int arr_lenght);
void count_sort(int *arr,unsigned int arr_lenght);
int main(int argc, char **argv)
{
int arr[MAX];
int t_arr[] = {2};
int k_arr[] = {0, 0, 0};
int arr_lenght = sizeof(arr) / sizeof(int);
int i;
for (i = 0; i < arr_lenght; i++)
{
arr[i] = rand() % 20;
}
item_arr(arr, arr_lenght);
count_sort(arr, arr_lenght);
item_arr(arr, arr_lenght);
return 0;
}
void item_arr(int *arr, unsigned int arr_lenght)
{
int i;
for (i = 0; i < arr_lenght; i++)
{
printf("%d ", *(arr + i));
}
printf("\n");
}
int arr_max(int *arr, unsigned int arr_lenght)
{
int i = 0;
int max_num = 0;
for (i = 0; i < arr_lenght; i++)
{
if (max_num < *(arr + i))
{
max_num = *(arr + i);
}
}
return max_num;
}
void count_sort(int *arr, unsigned int arr_lenght)
{
if (arr_lenght < 2)
{
return;
}
int i, j, k;
int imax = arr_max(arr, arr_lenght);
int tmp_arr[imax + 1];
memset(tmp_arr, 0, sizeof(tmp_arr));
for (i = 0; i < arr_lenght; i++)
{
tmp_arr[*(arr + i)]++;
}
i = 0;
for (j= 0; j < imax + 1; j++)
{
for (k = 0; k < *(tmp_arr + j); k++)
{
arr[i++] = j;
}
}
}