#include <stdio.h>
void CountSort(int *arr,int len,int *temp){
int i,j;
int count[len];
for(i = 0;i < len;i++)
count[i] = 0;
for(i = 0;i < len-1;i++){
for(j = i+1;j < len;j++){
if(arr[i] > arr[j]){
count[i]++;
}else
count[j]++;
}
}
for(i = 0;i < len;i++){
temp[count[i]] = arr[i];
}
}
int Max_Num(int *arr,int len){
int max = 0;
for(int i = 0;i<len ;i++){
if(arr[i]>max){
max = arr[i];
}
}
return max;
}
void Count_Sort(int *arr,int len,int *temp,int max){
int i,j,count[max];
for(i = 0 ; i<max;i++)
count[i]=0;
for(i = 0;i < len ;i++){
count[arr[i]]++;
}
for(i = 1;i<len;i++){
count[i]+=count[i-1];
}
for(j = len-1;j>=0;j--){
count[arr[j]]--;
temp[count[arr[j]]] = arr[j];
}
}
void display(int arr[], int len) {
for (int i = 0; i < len; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main(){
int arr[] = {9,5,7,10,8};
int temp[5];
printf("测试1-计数排序 (基于比较):排序前:");
display(arr, 5);
CountSort(arr, 5, temp);
printf("测试1-计数排序 (基于比较):排序后:");
display(temp,5);
int arr2[]={2,5,3,0,2,3,0,3};
int temp2[8];
int max = Max_Num(arr2, 8);
printf("测试2-计数排序 (不基于比较):排序前:");
display(arr2, 8);
Count_Sort(arr2, 8, temp2, max);
printf("测试2-计数排序 (不基于比较):排序后:");
display(temp2,8);
}