编辑代码

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

void printArray(int arr[], int len) {
    for(int i = 0; i < len; i++) {
        printf("%4d",arr[i]);
    }
    printf("\n");
}

void findMinMax(int arr[], int len, int *min, int *max) {
    *min = arr[0];
    *max = arr[0];
    for (int i = 1; i < len; ++i) {
        if (arr[i] < *min) {
            *min = arr[i];
        }
        else if (arr[i] > *max) {
            *max = arr[i];
        }
    }
}

void lineCountSort (int arr[], int len, int orderedArr[]) {
    int max, min;
    findMinMax(arr, len, &min, &max);
    int countLen = max - min + 1;
    //需要一共统计的数组
    int *count = (int*)malloc(sizeof(int)*(countLen));
    for (int i = 0; i < len; i++) {
        count[i] = 0;
    }
    //统计每个元素的个数
    for (int i = 0; i < len; i++) {
        ++count[arr[i] - min];
    }
    //统计小于等于元素的个数
    for (int i = 1; i < countLen; i++) {
        count[i] = count[i] + count[i-1];
    }
    //排序
    for (int i = len -1; i >=0; i--) {
        orderedArr[--count[arr[i] - min]] = arr[i];
    }
}


int main () {
    int arr1[] = {2,5,3,0,2,3,0,3};
    int orderedArr1[8];
    printArray(arr1,8);
    lineCountSort(arr1, 8, orderedArr1);
    printArray(orderedArr1,8);
    return 0;
}