编辑代码

#include <stdio.h>

void countSort(int arr[],int len,int orderedArr[]){

    //创建一个统计数组count[],初始值为0
    int count[len];

    for(int i=0;i<len;++i){
        count[i]=0;
    }

    //两层循环遍历,统计比当前元素小的元素的个数
    for(int i=0;i<len;++i){         //外层循环,遍历待排序列数组的每个元素
        for(int j=i+1;j<len;++j){   //内层循环,比较当前索引的元素与后面每一个元素的大小关系
            if(arr[i]>arr[j]){
                count[i]++;
            }
            else{
                count[j]++;
            }
        }
    }

    //根据统计出的个数进行排序
    for(int i=0;i<len;++i){
        orderedArr[count[i]]=arr[i];
    }
}

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

int main () {    
    int arr[]={4,23,7,38,65,91,16};  
    int len = sizeof(arr) / sizeof(arr[0]);
    int orderedArr[len];
    countSort(arr,len,orderedArr);
    printf("排序前的数组:\n");
    printArray(arr,len);
    printf("排序后的数组:\n");
    printArray(orderedArr,len);
    return 0;
}