编辑代码

#include <stdio.h>
#include <stdlib.h>

#define MAX 21

void item_arr(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 arr_lenght = sizeof(arr) / sizeof(int);
    int i;
    for (i = 0; i < arr_lenght; i++)
    {
        arr[i] = 1 + (rand() % 101);
    }

    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");
}

void count_sort(int arr[], unsigned int arr_lenght)
{
    if (arr_lenght < 2)
    {
        return;
    }
    int i, j, k;
    int max_num;
    int same_num;
    int *temp_arr = (int *)calloc(arr_lenght,sizeof(int));

    for (i = 0; i < arr_lenght; i++)
    {
        max_num = 0;
        same_num = 0;
        for (j = 0; j < arr_lenght; j++)
        {
            if (arr[j] < arr[i])
            {
                max_num++;
            }
            else {
                if (arr[j] == arr[i])
                {
                    same_num++;
                }
            }
        }
        if (temp_arr[max_num] == 0 && arr[i] != 0)
        {
            for (k = 0; k < same_num; k++)
            {
                temp_arr[max_num] = arr[i];
                max_num++;
            }
        }
    }

    for (k = 0; k < arr_lenght; k++)
    {
        arr[k] = temp_arr[k];
    }
    
    free(temp_arr);
}