编辑代码

#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;
        }
    }
    
}